2016-03-08 86 views
0

这是我第一次尝试编写Oracle过程,并以DBMS_OUTPUT.PUT_LINE行为中心收到错误(在问题标题中显示)。PLS-00306:调用'PUT_LINE'时参数的错误数量或类型

我在线阅读,它只能回传VARCAHR2列,所以我只投了两个非VARCHAR2列被访问,但我仍然得到错误。当我尝试直接在oracle SQL Developer中运行它时发生这个错误。

CREATE OR REPLACE PROCEDURE LOGGING_PRC 
(
    STARTDATE_IN IN VARCHAR2, 
    ENDDATE_IN IN VARCHAR2, 
    NAMES_IN IN VARCHAR2, 
    MODS_IN IN VARCHAR2, 
    LOGS_IN IN VARCHAR2, 

    ID_OUT OUT VARCHAR2, 
    NAME_OUT OUT VARCHAR2, 
    MODULE_OUT OUT VARCHAR2, 
    ENTRYDATE_OUT OUT VARCHAR2, 
    STATUS_OUT OUT VARCHAR2, 
    TYPE_OUT OUT VARCHAR2 
) 
    AS 
BEGIN 
    SELECT 
    CAST(ID_LOG AS VARCHAR2(16)), 
    APNAME, 
    APPMOD, 
    CAST(ENTRYDATE AS VARCHAR2(30)), 
    APPSTATUS, 
    LOGTYPE 
    INTO 
     ID_OUT, 
     NAME_OUT, 
     MODULE_OUT, 
     ENTRYDATE_OUT, 
     STATUS_OUT, 
     TYPE_OUT 
    FROM 
    BASE   
    WHERE  
    ENTRYDATE > STARTDATE_IN AND 
    ENTRYDATE < ENDDATE_IN AND 
    (NAMES = NAMES_IN OR NAMES_IN IS NULL) AND 
    (MODS = MODS_IN OR MODS_IN IS NULL) AND 
    (LOGS = LOGS_IN OR LOGS_IN IS NULL);  
    RETURN; 
DBMS_OUTPUT.PUT_LINE(ID_OUT, NAME_OUT, MODULE_OUT, ENTRYDATE_OUT, STATUS_OUT, TYPE_OUT); 
END LOGGING_PRC; 

有人看到我的代码不正确吗?

+0

的[语法](http://docs.oracle.com/cd/E11882_01/appdev.112/e40758/d_output.htm#ARPLS67327)显示,只需要一个字符串参数,而不是一个列表。 –

回答

5

DBMS_OUTPUT.PUT_LINE定义如下

procedure put_line(a varchar2); 

所以,它仅接受一个输入参数。

如果您需要打印多个字段的值,则需要将它们连接在一个单独的varchar2;你可以尝试使用:

DBMS_OUTPUT.PUT_LINE(ID_OUT || ',' || NAME_OUT || ',' || MODULE_OUT || ',' || ENTRYDATE_OUT || ',' || STATUS_OUT || ',' || TYPE_OUT); 
+0

感谢您提供快速反馈Aleksej。这解决了它... – michaelk46

相关问题