【问题标题】:PLS-00215: String length constraints must be in range (1 .. 32767)PLS-00215:字符串长度约束必须在范围内(1 .. 32767)
【发布时间】:2021-07-09 13:00:33
【问题描述】:

我有一个 oracle 包,其中有一个函数没有参数。

包名可以说是 ppp,函数名可以说是 fff。 函数在下面,我无法在没有参数的情况下执行函数。

功能-

FUNCTION  fff (P_FID NUMBER,DUCTBANKLABEL VARCHAR2, SERVICEDUCTVALID OUT NUMBER ) RETURN VARCHAR2
----End of R3 - Obs#195 (1 Oct 2018)
AS

CNT NUMBER;
INSTDATE VARCHAR2(100);
DUCTSIZE NUMBER;
.
.
.
.
many more.......;
BEGIN
.
.
.function does its thing and returns the value

END;

现在我试图用这样的 pl/sql 块调用这个函数-

set serveroutput on;
declare
aa NUMBER:=129685933;
bb VARCHAR2:='1705297E TO P5547635';
cc  NUMBER;
ANS VARCHAR2;
BEGIN
ANS:=ppp.fff(aa,bb,cc);
DBMS_OUTPUT.put_line(ANS);
END;

但出现以下错误-

Error report:
ORA-06550: line 3, column 4:
PLS-00215: String length constraints must be in range (1 .. 32767)
ORA-06550: line 5, column 5:
PLS-00215: String length constraints must be in range (1 .. 32767)
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.
*Action:

请帮助我如何执行此功能

【问题讨论】:

    标签: oracle plsql oracle-sqldeveloper plsql-package


    【解决方案1】:

    您需要在匿名 PL/SQL 块中指定 VARCHAR2 可变长度。

    DECLARE
        aa    NUMBER := 129685933;
        bb    VARCHAR2 (30) := '1705297E TO P5547635';
        cc    NUMBER;
        ANS   VARCHAR2 (200);
    BEGIN
        ANS := ppp.fff (aa, bb, cc);
        DBMS_OUTPUT.put_line (ANS);
    END;
    

    【讨论】:

    • 我只是一个初学者所以完全错过了它......现在很好但是当运行块而不是打印输出时它说“匿名块完成”......知道我能做什么吗?跨度>
    【解决方案2】:

    varchar2 变量需要有错误指示的长度。

    第 3 行

    bb VARCHAR2:='1705297E TO P5547635';
    

    和第 5 行

    ANS VARCHAR2;
    

    都缺少长度。假设您希望两者都允许,例如 100 个字符

    bb VARCHAR2(100):='1705297E TO P5547635';
    ANS VARCHAR2(100);
    

    【讨论】:

    • 我只是一个初学者所以完全错过了它......现在很好但是当运行块而不是打印输出时它说“匿名块完成”......知道我能做什么吗?跨度>
    • @TheSacredKiller - 您为 SQL Developer 和 PL/SQL Developer 这两个完全不同的 GUI 工具标记了这个。您实际使用哪一个来执行您的代码?如果您想查看写入dbms_output 的内容,您可能需要在您的 GUI 中启用它。
    • 我正在使用 sql developer...oracle 12 c
    • PL/SQL 是一个服务器进程,无法写入客户端屏幕。因此,dbms_output 确实 写入屏幕,而是写入一个缓冲区,该缓冲区在过程完成后返回给客户端。然后由客户端程序处理(或忽略)该缓冲区。正如@JustinCave 所说,您需要在您的GUI 中启用它。或者,如果您使用的是 sqlplus,则在执行该过程之前发出 sqlplus 命令 'set serverout on'。
    • @TheSacredKiller - 然后我删除了问题上的 PL/SQL Developer 标签。在 SQL Developer 中,如果您转到查看 | DBMS 输出,这将打开 DBMS 输出窗口。您需要单击该窗口中的绿色加号图标以启用会话的 DBMS 输出。
    猜你喜欢
    • 2021-09-19
    • 2018-02-22
    • 1970-01-01
    • 1970-01-01
    • 2018-02-28
    • 2022-10-24
    • 2021-06-13
    • 2018-05-03
    • 1970-01-01
    相关资源
    最近更新 更多