Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle输出参数的默认大小_Oracle_Parameters_Oracle11g_Output_Oracle Sqldeveloper - Fatal编程技术网

Oracle输出参数的默认大小

Oracle输出参数的默认大小,oracle,parameters,oracle11g,output,oracle-sqldeveloper,Oracle,Parameters,Oracle11g,Output,Oracle Sqldeveloper,我有一个问题,我正在创建这样一个过程: CREATE OR REPLACE PROCEDURE TEST_SIZE_OUT ( MSGTEXT OUT VARCHAR2 ) IS BEGIN --The next text has 200 characters MSGTEXT := '10101201212012012012012120121212134541010101011111111110000000010101000000000001111111

我有一个问题,我正在创建这样一个过程:

CREATE OR REPLACE PROCEDURE TEST_SIZE_OUT
( 
    MSGTEXT    OUT VARCHAR2
) IS 

BEGIN  

    --The next text has 200 characters
    MSGTEXT := '10101201212012012012012120121212134541010101011111111110000000010101000000000001111111101111111111111111111111111111111111111000000000000000023401654421524546545gh4g4h4ghdgj5dghj4dgj4j4ghj4ghj1101123m';

END TEST_SIZE_OUT;
/
但是,当我向MSGTEXT分配一个包含201个以上字符的文本并执行此过程时,它会生成以下错误:

ORA-06502: PL/SQL: numeric or value error: character string buffer too small

我不知道如何修复它。

在查询窗口中或仅使用SQPLus尝试以下操作:

declare

msg varchar(300) ;

begin

   test_size_out(msg);

end;
除非我弄错了,否则在字符串中有250个字符时,这将正常工作,但不是301


您可能还希望在存储过程前面加上SP前缀,在函数前面加上带有PKG的F包等。

因为MSGTEXT是一个out参数,调用者负责其大小。它叫什么名字?你能分享完整的场景吗?我从java代码中调用它。此过程不是从其他过程、函数或其他任何地方调用的。@Leonardo在Java代码中初始化callableStatement时,如何注册输出参数?这是一个问题,我无法访问Java代码,我必须在Oracle中解决它。现在我正在创建一个子类型来测试它。不,我不知道如何全局使用该子类型。我唯一的解决方案是在游标中返回文本,在这个块中它可以工作,因为在这个块中,SP的调用者定义了输出参数的大小,但是我需要知道是否有一种方法可以证明它,而不必这样做。我认为这是客户端的问题,我使用sqqldeveloper来执行此过程,但在其他类似pl sql developer的程序中,它可以工作。好的,在sql developer中,当您执行SP时,它会为您设置一个小的运行时环境。如果您查看上面设置值的地方,您将看到声明的varchar。是的,我发现了如何更改sqldeveloper的默认大小。但我不知道Oracle是否有默认大小,或者仅仅是sqldeveloper。我把它送去测试,我在等待答案。只有SQL开发者。varchar的本质意味着调用者必须分配足够的内存来引入varchar。通常这是一个指针。OCI必须重新分配资源,否则JDBC只需将一个资源交给进程,然后由JVM重新分配。没有魔法。如果调用方看到参数定义为varcch2n,那么它会分配那么多内存。谢谢,我非常感谢您的回答。我真的需要知道。