这是错误消息: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
或游标。
答案 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;