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

変数を宣言して同じOracleSQLスクリプトで使用するにはどうすればよいですか?

    SQL*Plusスクリプトで変数を宣言する方法はいくつかあります。

    1つは、VARを使用して、バインド変数を宣言することです。 VARに値を割り当てるメカニズムは、EXEC呼び出しを使用します。

    SQL> var name varchar2(20)
    SQL> exec :name := 'SALES'
    
    PL/SQL procedure successfully completed.
    
    SQL> select * from dept
      2  where dname = :name
      3  /
    
        DEPTNO DNAME          LOC
    ---------- -------------- -------------
            30 SALES          CHICAGO
    
    SQL>
    

    VARは、OUTパラメータまたは関数を持つストアドプロシージャを呼び出す場合に特に便利です。

    または、置換変数を使用することもできます。これらはインタラクティブモードに適しています:

    SQL> accept p_dno prompt "Please enter Department number: " default 10
    Please enter Department number: 20
    SQL> select ename, sal
      2  from emp
      3  where deptno = &p_dno
      4  /
    old   3: where deptno = &p_dno
    new   3: where deptno = 20
    
    ENAME             SAL
    ---------- ----------
    CLARKE            800
    ROBERTSON        2975
    RIGBY            3000
    KULASH           1100
    GASPAROTTO       3000
    
    SQL>
    

    他のスクリプトを呼び出すスクリプトを作成する場合、変数を事前に定義しておくと便利です。このスニペットは、値の入力を求めるプロンプトなしで実行されます:

    SQL> def p_dno = 40
    SQL> select ename, sal
      2  from emp
      3  where deptno = &p_dno
      4  /
    old   3: where deptno = &p_dno
    new   3: where deptno = 40
    
    no rows selected
    
    SQL>
    

    最後に、匿名のPL/SQLブロックがあります。ご覧のとおり、宣言された変数にインタラクティブに値を割り当てることができます:

    SQL> set serveroutput on size unlimited
    SQL> declare
      2      n pls_integer;
      3      l_sal number := 3500;
      4      l_dno number := &dno;
      5  begin
      6      select count(*)
      7      into n
      8      from emp
      9      where sal > l_sal
     10      and deptno = l_dno;
     11      dbms_output.put_line('top earners = '||to_char(n));
     12  end;
     13  /
    Enter value for dno: 10
    old   4:     l_dno number := &dno;
    new   4:     l_dno number := 10;
    top earners = 1
    
    PL/SQL procedure successfully completed.
    
    SQL>
    


    1. justify_interval()がPostgreSQLでどのように機能するか

    2. NEWを参照する行のPostgres関数のNULL値

    3. SQLServerデータベースのクラウドへの移動

    4. Hibernateの列挙型、列挙型として永続化