0

次の行を含む Oracle ストアド プロシージャを変更する必要があります。

      InsStmt = 'INSERT INTO EMPLOYEE (Emp_cd, Emp_lst_nm, Emp_fst,nm) VALUES
                (:Emp_cd, :Emp_lst_nm, :Emp_fst_nm);';
    varExec :='
    DECLARE
      var1 VARCHAR2(100);
    BEGIN
      var1 := :Emp_cd||:Emp_lst_nm||:Emp_fst_nm;
      '||InsStmt||'
    END;';
   EXECUTE IMMEDIATE varExec USING ip_param_cd, ip_param_lnm, ip_param_fnm;

私は、Oracle ストアド プロシージャの基本的な知識しか持っていません。いくつかの調査の後、|| 演算子は文字列を連結するためのものです。

しかし、私はまだ以下の声明が何を意味するのか疑問に思っています

var1 := :Emp_cd||:Emp_lst_nm||:Emp_fst_nm;
      '||InsStmt||'

http://docs.oracle.com/cd/B28359_01/appdev.111/b28843/tdddg_procedures.htm#CIHGDECDのチュートリアルを実行しましたが、ヘルプが見つかりませんでした。

4

1 に答える 1

2

トリガー コンテキストの外では、列:はステートメント内の変数をバインドするために使用されます。

例えば:

EXECUTE IMMEDIATE 'UPDATE mytable SET age = 25 WHERE age = :1' 
     USING IN localVarAge;

この場合、:1値は の値に置き換えられますlocalVarAge。「:」変数が実際のラベルではなく、準備されたステートメントに表示される順序が重要です。

あなたのコードには明らかに欠落している部分があります。この部分var1 := :Emp_cd||:Emp_lst_nm||:Emp_fst_nm;は引用符で囲む必要があります。とにかく、その直後に終了引用符と連結があるので、それは理にかなっています。

于 2013-03-17T03:26:01.113 に答える