Oracle过程错误(PLS-00428)

时间:2013-01-24 06:05:42

标签: sql plsql oracle10g procedure

这是错误消息:PLS-00428: an INTO clause is expected in this SELECT statement.同时,这是测试显示系统日期的过程:

CREATE OR REPLACE 
PROCEDURE "TEST_PROCEDURE"
AS
BEGIN
    SELECT SYSDATE FROM DUAL;
END;

首先,我不需要使用INTO Oracle坚持让我这样做。是否还有其他方法使用光标(我在这里看到它https://stackoverflow.com/a/6029963/1983024)?我认为它不应该是这样的,它在MS SQL中正常运行而不使用INTO或游标。

5 个答案:

答案 0 :(得分:4)

  

首先,我不需要使用INTO Oracle坚持的内容   对我来说。

事实是,Oracle是正确的:你需要使用INTO来获取返回值。

毕竟,如果你想显示查询结果,你需要一个变量把它放在第一位。

答案 1 :(得分:4)

你可以写

CREATE OR REPLACE 
PROCEDURE "TEST_PROCEDURE"
AS
BEGIN
for r_row in ( SELECT SYSDATE s FROM DUAL)
  dbms_output.put_line(r_row.s);
end loop;
END;

或者你必须有一个变量。

CREATE OR REPLACE 
PROCEDURE "TEST_PROCEDURE"
AS
  v_Date date;
BEGIN
    SELECT SYSDATE into v_date FROM DUAL;
  dbms_output.put_line(v_date );

END;

输出格式由您的NLS_DATE_FORMAT设置决定,或者您可以明确显示to_char(v_date, 'dd-mm-yyyy')等。

答案 2 :(得分:1)

最后找到了我想要的输出解决方案(基于你的回答):D

CREATE OR REPLACE 
PROCEDURE "TEST_PROCEDURE"
RET_DATE CHAR(10);
BEGIN
    SELECT TO_CHAR(SYSDATE, 'MM/DD/YYYY') INTO RET_DATE FROM DUAL;
    DBMS_OUTPUT.PUT_LINE(RET_DATE);
END;

这将显示格式为MM / DD / YYYY的SYSDATE。不过,感谢回复和想法(主要是@Jeffrey Kemp)。 Oracle只是延长了MS SQL在一行中通常可以做的事情:D

答案 3 :(得分:0)

您可以使用

CREATE OR replace PROCEDURE Test_procedure
IS
  date CHAR(10);
BEGIN
    SELECT To_char(SYSDATE, 'MM/DD/YYYY')
    INTO   date
    FROM   dual;

    dbms_output.Put_line(date);
END; 

它会将日期返回到char格式。

如果要将日期转换为日期格式,只需声明日期类型变量,然后将sysdate值INTO赋值给该变量。然后使用DBMS_OUTPUT.PUT_LINE(变量)打印DATE。

答案 4 :(得分:0)

如果你想在一行中完成,你也可以使用:

CREATE OR replace PROCEDURE Test_procedure
IS
BEGIN
  dbms_output.put_line(to_char(sysdate, 'MM/DD/YY'));
END;