128

以下は、SQL Server 2000 で変数を使用する例です。

DECLARE @EmpIDVar INT

SET @EmpIDVar = 1234

SELECT *
FROM Employees
WHERE EmployeeID = @EmpIDVar

複雑さを増すことなく、SQL Developerを使用してOracleでまったく同じことをしたいと考えています。とても簡単なことのように思えますが、簡単な解決策が見つかりません。どうすればいいですか?

4

10 に答える 10

104

バージョン 3.2 の SQL-Developer を使用しています。他のものは私にはうまくいきませんでしたが、これはうまくいきました:

define value1 = 'sysdate'

SELECT &&value1 from dual;

また、これはここで提示された最も巧妙な方法です。

(「define」部分を省略すると、その値を求めるプロンプトが表示されます)

于 2013-01-15T08:16:05.663 に答える
82

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
于 2014-03-04T12:14:42.657 に答える
53

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;
于 2011-04-13T18:08:15.000 に答える
15

わかりました、これはちょっとしたハックですが、これはスクリプトではなく単純なクエリで変数を使用する方法です。

WITH
    emplVar AS
    (SELECT 1234 AS id FROM dual)
SELECT
    *
FROM
    employees,
    emplVar
WHERE
    EmployId=emplVar.id;

どこでも実行できます。

于 2016-07-08T10:22:37.240 に答える
13

簡単な答え NO.

ただし、バインド変数を使用して次のバージョンを実行することで、同様のことを実現できます。

SELECT * FROM Employees WHERE EmployeeID = :EmpIDVar 

上記のクエリを SQL Developer で実行すると、バインド変数 EmployeeID の値を入力するよう求められます。

于 2011-04-13T18:02:26.197 に答える