以下は、SQL Server 2000 で変数を使用する例です。
DECLARE @EmpIDVar INT
SET @EmpIDVar = 1234
SELECT *
FROM Employees
WHERE EmployeeID = @EmpIDVar
複雑さを増すことなく、SQL Developerを使用してOracleでまったく同じことをしたいと考えています。とても簡単なことのように思えますが、簡単な解決策が見つかりません。どうすればいいですか?
バージョン 3.2 の SQL-Developer を使用しています。他のものは私にはうまくいきませんでしたが、これはうまくいきました:
define value1 = 'sysdate'
SELECT &&value1 from dual;
また、これはここで提示された最も巧妙な方法です。
(「define」部分を省略すると、その値を求めるプロンプトが表示されます)
SQL-plus には、置換とバインドの 2 種類の変数があります。
これは置換です (置換変数は、SQL*Plus コマンド オプションまたはその他のハードコードされたテキストを置き換えることができます)。
define a = 1;
select &a from dual;
undefine a;
これがバインドです (バインド変数は、RDBMS で実行される SQL および PL/SQL ステートメントのデータ値を格納します。単一の値または完全な結果セットを保持できます)。
var x number;
exec :x := 10;
select :x from dual;
exec select count(*) into :x from dual;
exec print x;
SQL Developerは置換変数をサポートしていますが、バインド構文を使用して問合せを実行すると、:var
(ダイアログ・ボックスで)バインドを求めるプロンプトが表示されます。
参照:
UPDATE 置換変数の使い方は少しトリッキーです。
define phone = '+38097666666';
select &phone from dual; -- plus is stripped as it is a number
select '&phone' from dual; -- plus is preserved as it is a string
SQL*Plus では、非常によく似たことができます。
SQL> variable v_emp_id number;
SQL> select 1234 into :v_emp_id from dual;
1234
----------
1234
SQL> select *
2 from emp
3 where empno = :v_emp_id;
no rows selected
SQL Developerでは、任意の数のバインド変数(コロンで始まる)を含むステートメントを実行すると、値を入力するよう求められます。アレックスが指摘しているように、「スクリプトの実行」機能 (F5) を使用して、アレックスが提案する代替の EXEC 構文を使用して同様のことを行うこともできます。
variable v_count number;
variable v_emp_id number;
exec :v_emp_id := 1234;
exec select count(1) into :v_count from emp;
select *
from emp
where empno = :v_emp_id
exec print :v_count;
わかりました、これはちょっとしたハックですが、これはスクリプトではなく単純なクエリで変数を使用する方法です。
WITH
emplVar AS
(SELECT 1234 AS id FROM dual)
SELECT
*
FROM
employees,
emplVar
WHERE
EmployId=emplVar.id;
どこでも実行できます。
簡単な答え NO.
ただし、バインド変数を使用して次のバージョンを実行することで、同様のことを実現できます。
SELECT * FROM Employees WHERE EmployeeID = :EmpIDVar
上記のクエリを SQL Developer で実行すると、バインド変数 EmployeeID の値を入力するよう求められます。