簡體   English   中英

如何在 Oracle SQL Developer 中使用變量?

[英]How do I use variables in Oracle SQL Developer?

下面是在 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;

這也是這里介紹的最巧妙的方式。

(如果省略“定義”部分,系統會提示您輸入該值)

SQL-plus 中有兩種類型的變量:替換和綁定。

這是替換(替換變量可以替換 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 支持替換變量,但是當您使用 bind :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 的值。

您可以在其他地方閱讀有關替換變量的內容; 它們在 SQL Developer 中非常方便。 但是我很適合嘗試在 SQL Developer 中使用綁定變量。 這就是我所做的:

SET SERVEROUTPUT ON
declare
  v_testnum number;
  v_teststring varchar2(1000);

begin
   v_testnum := 2;
   DBMS_OUTPUT.put_line('v_testnum is now ' || v_testnum);

   SELECT 36,'hello world'
   INTO v_testnum, v_teststring
   from dual;

   DBMS_OUTPUT.put_line('v_testnum is now ' || v_testnum);
   DBMS_OUTPUT.put_line('v_teststring is ' || v_teststring);
end;

SET SERVEROUTPUT ON使文本可以打印到腳本輸出控制台。

我相信我們在這里所做的正式稱為 PL/SQL。 我們已經離開了純 SQL 領域,並在 Oracle 中使用了不同的引擎。 看到上面的SELECT嗎? 在 PL/SQL 中,您總是必須SELECT ... INTO變量或引用。 您不能在 PL/SQL 中僅SELECT並返回結果集。

我認為最簡單的方法是:

DEFINE EmpIDVar = 1234;

SELECT *
FROM Employees
WHERE EmployeeID = &EmpIDVar

對於字符串值,它將類似於:

DEFINE EmpIDVar = '1234';

SELECT *
FROM Employees
WHERE EmployeeID = '&EmpIDVar'

使用下一個查詢:

DECLARE 
  EmpIDVar INT;

BEGIN
  EmpIDVar := 1234;

  SELECT *
  FROM Employees
  WHERE EmployeeID = EmpIDVar;
END;

試試這個它會工作,最好創建一個程序,如果程序不可行,您可以使用此腳本。

with param AS(
SELECT 1234 empid
FROM dual)
 SELECT *
  FROM Employees, param
  WHERE EmployeeID = param.empid;
END;

在 sql developer 中,默認情況下定義屬性為“ON”。 如果它在任何情況下都是“OFF”,請使用以下步驟。

set define on; define batchNo='123'; update TABLE_NAME SET IND1 = 'Y', IND2 = 'Y' WHERE BATCH_NO = '&batchNo';

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM