![](/img/trans.png)
[英]How do I edit BLOBs (containing JSON) in 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.