programing tip

Oracle SQL Developer에서 변수를 어떻게 사용합니까?

itbloger 2020. 8. 13. 07:58
반응형

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구문을 사용 하여 쿼리를 실행 하면 대화 상자에서 바인딩을 묻는 메시지가 나타납니다.

참고:

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

반응형