【问题标题】:What is the default size of a varchar2 input to Oracle stored procedure, and can it be changed?Oracle 存储过程的 varchar2 输入的默认大小是多少,可以更改吗?
【发布时间】:2011-06-08 04:57:15
【问题描述】:

我在 Oracle 数据库 10g 中有一个存储过程,其中我的输入是 varchar2,但是当输入字符串很长(不确定确切长度可能 > 8000)时,我无法让它运行。

我的想法是'intext varchar2'(如下)默认太小了。在其他需要更长字符串的情况下,我可能会将 varchar2 定义为“intext2 VARCHAR2(32767);”我尝试在下面的代码中类似地定义大小,但我的语法不正确。

create or replace PROCEDURE TESTPROC ( intext IN VARCHAR2

) AS ....

intext varchar2 的(默认)大小是多少?

可以定义(增加)该大小吗?

谢谢

【问题讨论】:

    标签: oracle stored-procedures varchar2


    【解决方案1】:

    您不能为过程指定 VARCHAR2 参数的大小。

    该过程应该愉快地接受最大为 32k 的字符串(PL/SQL 中 VARCHAR2 的最大大小)。如果它是从 SQL 而不是 PL/SQL 调用的函数,则限制为 4k,因为 SQL 中 VARCHAR2 的最大大小仅为 4k。

    【讨论】:

    • 贾斯汀这个陈述对于输出参数也是正确的吗?
    • @D.J. - out 参数也没有指定大小,是的。
    • 但在我的情况下,它的失败是否有任何控制参数大小的设置?
    • @D.J. - 你能定义“失败”吗?由于调用者需要声明一个变量来保存输出并且该变量必须具有大小,因此该过程完全有可能试图返回一个大于调用者声明的变量的字符串。如果是这样,调用者将需要声明一个更大的变量。您仍然不会为过程的 out 参数声明长度
    • 创建或替换 PROCEDURE USP_TEST(V_OUTPUT OUT VARCHAR2)IS VAR_PLSQL VARCHAR2(32000);温度号码; BEGIN FOR REC IN 1..4005 循环开始 VAR_PLSQL := VAR_PLSQL||', '||REC;结尾;结束循环;从 DUAL 中选择 VSIZE(VAR_PLSQL) INTO TEMP; DBMS_OUTPUT.PUT_LINE(TEMP); V_OUTPUT := VAR_PLSQL;结束;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-28
    • 1970-01-01
    • 1970-01-01
    • 2011-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多