0

私はPL/SQLを初めて使用し、曜日/時間に基づいてエラーメッセージを返すプロシージャを作成する必要がある宿題の質問をしていますが、そのポイントに到達する前に基本的なことに固執しています:

私は次のように書いています。

CREATE OR REPLACE PROCEDURE
SECURE_IT
(p_weekday NUMBER,
 p_currtime TIME)
IS
BEGIN
select to_char(current_timestamp,'D')
  , to_char(current_timestamp,'HH24:MI') 
into p_weekday, p_currtime 
from dual;
DBMS_OUTPUT.PUT_LINE(p_weekday,p_currtime);
END;   

私のすべての;はすべて整っていると思いますが、これ、本のコード、オンラインで見つけたコードの間に違いは見られませんが、それでもこのエラーが返されます:

PLS-00103: Encountered the symbol "end-of-file" when expecting one of the 
following: ; <an identifier> <a double-quoted delimited-identifier> 
current delete exists prior <a single-quoted SQL string> The symbol ";" 
was substituted for "end-of-file" to continue.

END; を変更してみました。SECURE_IT を終了します。何かが修正されることを期待して(私が考えることができるすべて)、何が問題なのかわかりません。誰かがこれで私を助けてくれますか?

前もって感謝します :-)

4

2 に答える 2

0

基本的にここでわかるのは、宿題の一部として手順を出力する必要があるということです。しかし、dbms_output を使用しても何の効果もありません。これらの値をどこでも使用するには、これらを OUT パラメータとして作成する必要があります。

    CREATE OR REPLACE PROCEDURE SECURE_IT(
        p_weekday OUT VARCHAR2,
        p_currtime OUT VARCHAR2)
    IS
    BEGIN
      p_weekday := TO_CHAR(CURRENT_TIMESTAMP,'D');
      p_currtime:= TO_CHAR(CURRENT_TIMESTAMP,'HH24:MI');
      DBMS_OUTPUT.PUT_LINE(p_weekday||' '||p_currtime);
    END;

-----------------------------EXECUTE--------------------------------------------

var week VARChaR2(100);
var curtime VARChaR2(100);

EXEC SECURE_IT(:week,:curtime);

print week;
print curtime;

-------------------------------OUTPUT--------------------------------------------

WEEK
-
6

CURTIME
-----
06:12

-------------------------------OUTPUT----------------------------------------------
于 2015-11-27T06:15:31.183 に答える
0

手順にいくつかの間違いがあります

  1. TIMEdatatype (PL/SQL にはそのようなデータ型はありません。Documentationを参照してください。代わりに、datetime データ型を渡すこともできます: DATE、TIMESTAMP、TIMESTAMP WITH TIME ZONE、および TIMESTAMP WITH LOCAL TIME ZONE) 多くのオプションを使用して時間部分を抽出できます。例えば:

    SELECT TO_CHAR(p_currDateTime, 'HH24:MI:SS') into p_currtime FROM DUAL;
    
  2. IN パラメータであるp_weekday&を更新しようとしています。p_currtimeこれらのパラメーターは、プロシージャーに値を渡すために使用され、値を返すためには使用されません。

  3. DBMS_OUTPUT.PUT_LINEパラメータを 1 つだけ取るため、代わりに次の,ように 2 つの値を連結できます。DBMS_OUTPUT.PUT_LINE(p_weekday||'-'||p_currtime);

この手順で何を達成しようとしているのかが明確でない場合、非常に役立ちます

于 2015-11-27T05:30:58.527 に答える