2008-10-09 24 views
12

Khi bạn tạo một thủ tục (hoặc một hàm) trong Oracle PL/SQL, bạn không thể xác định độ dài tối đa của các đối số varchar2, chỉ kiểu dữ liệu. Ví dụ:Giới hạn kích thước cho đối số chương trình con PL/SQL varchar2 trong Oracle là gì?

create or replace procedure testproc(arg1 in varchar2) is 
begin 
    null; 
end; 

Bạn có biết độ dài tối đa của chuỗi mà bạn có thể chuyển làm đối số arg1 cho quy trình này trong Oracle không?

Trả lời

8

Tôi đã thử với testproc (lpad ('', 32767, '')) và nó hoạt động.

Với 32.768 bytes nó không thành công, vì vậy nó là 32K - 1 byte

2

Trong PL/SQL kích thước tối đa của VARCHAR2 datatype là 32767 byte từ 10gR2 (và có lẽ trước đó nhưng tôi chỉ kiểm tra các tài liệu tối đa phát hành mà).

Các tài liệu tham khảo tài liệu hướng dẫn:

+0

Chỉ cần tò mò, bạn có biết tại sao không phải 32Kb thay vì 32Kb -1? – Roland

+0

@Roland Không, tôi không biết. Có lẽ đó là một [null-chấm dứt chuỗi] (https://en.wikipedia.org/wiki/Null-terminated_string), có thể cái gì khác. Oh và xin đừng hỏi tại sao nó là 2^15-1 và không phải 2^16-1. Chỉ Oracle biết. :) – user272735

+1

@Roland, đó là do biến số nguyên ký tự 2 byte mặc định có phạm vi từ -32768 đến 32767. –

Các vấn đề liên quan