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;

そもそも、INTOオラクルが私にそうするように主張していることを使う必要はありません。カーソルを使用する以外に他の方法はありますか(私はここでそれを見ましたhttps://stackoverflow.com/a/6029963/1983024)?私はそれがそのようであるべきではないと思います、これはINTOまたはカーソルを使用せずにMSSQLのように通常通り実行されます。

4

5 に答える 5

4

そもそも、INTOOracleが私に要求していることを使用する必要はありません。

実際のところ、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の形式で表示されます。それでも、返信とアイデアに感謝します(主に@JeffreyKemp)。Oracleは、MS SQLが通常1行で実行できることを延長するだけです: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

1行で実行したい場合は、次を使用することもできます。

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 に答える