sql >> データベース >  >> RDS >> Oracle

T-SQLの場合と同じように、PL / SQLで変数を宣言して使用するにはどうすればよいですか?

    改訂された回答

    別のプログラムからこのコードを呼び出さない場合は、PL / SQLをスキップし、バインド変数を使用してSQLで厳密に呼び出すオプションがあります。

    var myname varchar2(20);
    
    exec :myname := 'Tom';
    
    SELECT *
    FROM   Customers
    WHERE  Name = :myname;
    

    多くのツール(ToadやSQL Developerなど)では、varを省略しています およびexec ステートメントにより、プログラムは値の入力を求めます。

    元の回答

    T-SQLとPL/SQLの大きな違いは、Oracleではクエリの結果を暗黙的に返すことができないことです。結果は常に何らかの方法で明示的に返される必要があります。最も簡単な方法は、DBMS_OUTPUTを使用することです。 (printとほぼ同等です )変数を出力するには:

    DECLARE
       myname varchar2(20);
    BEGIN
         myname := 'Tom';
    
         dbms_output.print_line(myname);
    END;
    

    ただし、結果セットを返そうとしている場合、これはそれほど役に立ちません。その場合は、コレクションまたはリフレクターを返す必要があります。ただし、これらのソリューションのいずれかを使用するには、コードを関数またはプロシージャでラップし、結果を消費できるものから関数/プロシージャを実行する必要があります。このように機能した関数は、次のようになります。

    CREATE FUNCTION my_function (myname in varchar2)
         my_refcursor out sys_refcursor
    BEGIN
         open my_refcursor for
         SELECT *
         FROM   Customers
         WHERE  Name = myname;
    
         return my_refcursor;
    END my_function;
    


    1. 新しいインデックス列をキーに含める必要がありますか、それとも含める必要がありますか?

    2. あるフィールドの日付と別のフィールドの時刻を組み合わせる方法-MSSQLServer

    3. EditTextのユーザー入力でスピナーのフィールドを更新するにはどうすればよいですか?

    4. SQLServerでトリガーイベントのリストを返す方法