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;
또한 여기에 제시된 가장 매끄러운 방법입니다.
( "define"부분을 생략하면 해당 값을 입력하라는 메시지가 표시됩니다)
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는 대체 변수를 지원하지만 바인드 :var
구문을 사용 하여 쿼리를 실행 하면 대화 상자에서 바인딩을 묻는 메시지가 나타납니다.
참고:
- http://www.oracle.com/technetwork/testcontent/sub-var-087723.html SQL * Plus 대체 변수, Christopher Jones, 2004
UPDATE 대체 변수는 사용하기가 약간 까다 롭습니다.
define phone = '+38097666666';
select &phone from dual; -- plus is stripped as it is number
select '&phone' from dual; -- plus is preserved as it is 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에서 바인드 변수 (콜론 접두사)가있는 문을 실행하면 값을 입력하라는 메시지가 표시됩니다. Alex가 지적했듯이 Alex가 제안하는 대체 EXEC 구문과 함께 "Run Script"기능 (F5)을 사용하여 유사한 작업을 수행 할 수도 있습니다.
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;
간단한 대답 아니오.
그러나 바인드 변수를 사용하여 다음 버전을 실행하면 비슷한 결과를 얻을 수 있습니다.
SELECT * FROM Employees WHERE EmployeeID = :EmpIDVar
SQL Developer에서 위의 쿼리를 실행하면 바인드 변수 EmployeeID에 대한 값을 입력하라는 메시지가 표시됩니다.
Ok 나는 이것이 약간의 해킹이라는 것을 알고 있지만 이것은 스크립트가 아닌 간단한 쿼리에서 변수를 사용하는 방법입니다.
WITH
emplVar AS
(SELECT 1234 AS id FROM dual)
SELECT
*
FROM
employees,
emplVar
WHERE
EmployId=emplVar.id;
어디서나 실행할 수 있습니다.
대체 변수에 대해 다른 곳에서 읽을 수 있습니다. 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
makes it so text can be printed to the script output console.
I believe what we're doing here is officially called PL/SQL. We have left the pure SQL land and are using a different engine in Oracle. You see the SELECT
above? In PL/SQL you always have to SELECT ... INTO
either variable or a refcursor. You can't just SELECT
and return a result set in PL/SQL.
Use the next query:
DECLARE
EmpIDVar INT;
BEGIN
EmpIDVar := 1234;
SELECT *
FROM Employees
WHERE EmployeeID = EmpIDVar;
END;
Try this it will work, it's better create a procedure, if procedure is not possible you can use this script.
with param AS(
SELECT 1234 empid
FROM dual)
SELECT *
FROM Employees, param
WHERE EmployeeID = param.empid;
END;
In sql developer define properties by default "ON". If it is "OFF" any case, use below steps.
set define on; define batchNo='123'; update TABLE_NAME SET IND1 = 'Y', IND2 = 'Y' WHERE BATCH_NO = '&batchNo';
I think that the Easiest way in your case is :
DEFINE EmpIDVar = 1234;
SELECT *
FROM Employees
WHERE EmployeeID = &EmpIDVar
For the string values it will be like :
DEFINE EmpIDVar = '1234';
SELECT *
FROM Employees
WHERE EmployeeID = '&EmpIDVar'
참고URL : https://stackoverflow.com/questions/5653423/how-do-i-use-variables-in-oracle-sql-developer
'programing tip' 카테고리의 다른 글
Maven을 사용하지 않고 Spring Framework jar를 어디에서 다운로드 할 수 있습니까? (0) | 2020.08.13 |
---|---|
Create-React-App 기반 프로젝트에 글꼴을 추가하는 방법은 무엇입니까? (0) | 2020.08.13 |
for-each 루프 반복이 시작되기 전에 널 검사를 피하는 방법이 있습니까? (0) | 2020.08.13 |
언제 뮤텍스를 사용해야하고 언제 세마포어를 사용해야합니까? (0) | 2020.08.13 |
LaTeX에서 \ include 후 페이지 나누기가없는 방법 (0) | 2020.08.12 |