5

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

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

首先,我不需要使用INTOOracle 坚持要我做的事情。除了使用光标之外还有其他方法吗(我在这里看到过https://stackoverflow.com/a/6029963/1983024)?我认为不应该那样,这确实像在 MS SQL 中一样正常运行,无需使用INTO或游标。

4

5 回答 5

4

首先,我不需要使用 INTO Oracle 坚持让我做的事情。

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

毕竟,如果您想显示查询结果,您将需要一个变量来首先将其放入。

于 2013-01-24T06:33:37.997 回答
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')

于 2013-01-24T07:52:43.087 回答
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;

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

于 2013-01-24T07:50:34.717 回答
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 值分配给该变量。然后使用 DBMS_OUTPUT.PUT_LINE(variable) 打印 DATE。

于 2013-01-24T10:44:28.100 回答
0

如果您想在一行中完成,您还可以使用:

CREATE OR replace PROCEDURE Test_procedure
IS
BEGIN
  dbms_output.put_line(to_char(sysdate, 'MM/DD/YY'));
END;
于 2014-09-10T14:25:01.667 回答