목상치
728x90

'오라클 쿼리'에 해당되는 글 2건

  1. 2023.08.23 oracle 쿼리시 declare 사용해보기
  2. 2023.08.23 chatGPT가 알려주는 오라클 declare 사용법
목하치
반응형
728x90

MS SQL에서 여러 테이블을 여러번 조회할 때 조회 조건을 변수로 선언하면 변수 값만 바꾸면 쉽게 조회 할 수 있는데 이때 declare를 사용한다. 

declare @c_id1 varcha(20)
set @c_id='id34'
select * from table where id =@c_id

그런데 오라클을 어떻게 되는 지 궁금해서 찾아보아 변경해보았다. 

DECLARE
    c_id1 VARCHAR2(20);
BEGIN
     c_id1 := 'id34';
     SELECT * FROM table_name WHERE id = c_id1;
END; /

그런데 서브 쿼리에 넣어서 해보니 안되고 구글 검색도 잘 안되어서 

그래서 chatGPT에 물어보았다

https://thepin.tistory.com/106

 

chatGPT가 알려주는 오라클 declare 사용법

앞서 글에서 서브쿼리가 포함된 반복 쿼리에 대해 chatGPT에 도움 받아 데이터 쿼리후 삭제하는 것을 만들어 보았습니다. Please convert one more time. declare @c_id1 varchar(20), @c_site1 varchar(20) set @c_id='id34' s

thepin.tistory.com

 

728x90

'데이터엔지니어 > SQL' 카테고리의 다른 글

근속년수 구하기-ms sql  (0) 2021.07.16
SQL쿼리-07조인  (0) 2020.02.17
SQL 쿼리05-집계  (0) 2020.02.16
SQL 쿼리04-데이터 조작  (0) 2020.02.15
SQL 쿼리03-정렬  (0) 2020.02.15
Posted by 댕기사랑
,
728x90

앞서 글에서 서브쿼리가 포함된 반복 쿼리에 대해 chatGPT에 도움 받아 데이터 쿼리후 삭제하는 것을 만들어 보았습니다. 

Please convert one more time. 
declare @c_id1 varchar(20), @c_site1 varchar(20)
set @c_id='id34'
set @c_site1 = 'AU'
select * from table where id =@c_id and site_id = @c_site1

그래서 나온 결과가 ..

DECLARE
       c_id1 VARCHAR2(20);
       c_site1 VARCHAR2(20);
BEGIN
       c_id1 := 'id34';
       c_site1 := 'AU';

       SELECT * FROM table_name WHERE id = c_id1 AND site_id = c_site1;
END

일단 이해는 되어 복잡하게 변형하여 봅니다.  서브 쿼리한 결과를 변수로 받는 것이죠.

DECLARE
     CUST_NO1 VARCHAR2(20);
     SITE_CD1 vARCHAR2(20);
     AY_SEQ1 VARCHAR2(20);
     D_ST_SEQ1 VARCHAR2(20);

BEGIN
    CUST_NO1 := 'cook';
    SITE_CD1 := 'A';
    AY_SEQ1 := (SELECT AY_SEQ FROM ML.AY_DETAIL
     WHERE CUST_NO = CUST_NO1 AND SITE_CD = SITE_CD1 );

다듬어 달라고 하니 예외처리 문을 넣어주네요

DECLARE
     CUST_NO1 VARCHAR2(20);
     SITE_CD1 VARCHAR2(20);
     AY_SEQ1 VARCHAR2(20);
     D_ST_SEQ1 VARCHAR2(20);

BEGIN
     CUST_NO1 := 'cook';
     SITE_CD1 := 'A';
     SELECT AY_SEQ, D_ST_SEQ
     INTO AY_SEQ1, D_ST_SEQ1
     FROM ML.AY_DETAIL
     WHERE CUST_NO = CUST_NO1 AND SITE_CD = SITE_CD1;

-- Now you can use AY_SEQ1 and D_ST_SEQ1 for further processing if needed -- ...
      DBMS_OUTPUT.PUT_LINE('AY_SEQ1: ' || AY_SEQ1);
      DBMS_OUTPUT.PUT_LINE('D_ST_SEQ1: ' || D_ST_SEQ1);

EXCEPTION
     WHEN NO_DATA_FOUND THEN
         DBMS_OUTPUT.PUT_LINE('No data found for the given criteria.');
     WHEN OTHERS THEN
         DBMS_OUTPUT.PUT_LINE('An error occurred.');
END; /

결론적으로 into를 넣어주는 게 mssql과 큰 차이점인 것 같다. 

 

보통 mssql에서는 스토어프로시져는 만들어 간편하게 사용하는데 오라클도 가능한지 물었더니

CREATE OR REPLACE PROCEDURE DeleteAndDisplayValue
      ( p_input_value1 IN VARCHAR2,
        p_input_value2 IN VARCHAR2
)  IS
      v_sequence_value NUMBER;
      v_table2_value NUMBER;
BEGIN

-- Find specific sequence value in Table 1

      SELECT sequence_column INTO v_sequence_value
      FROM table1
      WHERE some_column = p_input_value1;

-- Find value in Table 2 based on input value

      SELECT table2_column INTO v_table2_value
      FROM table2
      WHERE another_column = p_input_value2;

-- Delete value from Table 

      DELETE FROM table2
       WHERE another_column = p_input_value2;

-- Display the results
      DBMS_OUTPUT.PUT_LINE( 'Sequence Value: ' || v_sequence_value);
      DBMS_OUTPUT.PUT_LINE( 'Table 2 Value: ' || v_table2_value);

     COMMIT; -- Commit the changes
EXCEPTION
      WHEN NO_DATA_FOUND THEN
                  DBMS_OUTPUT.PUT_LINE( 'No data found.');
      WHEN OTHERS THEN
            DBMS_OUTPUT.PUT_LINE( 'An error occurred.');
            ROLLBACK; -- Rollback changes in case of error

END DeleteAndDisplayValue;

나왔는데 ... 권한이 없어서 그런지 생성이 안된다. 그리고 작성된 스토어 프로시져는 아래처럼 실행하면 된다고 한다.

BEGIN
      DeleteAndDisplayValue('input_value1','input_value2');
END;

 

 

 

아직은 오라클이 mssql만큼 쉽지 않다. 확 와닫지 않는다. 

 

 

 

오라클 강의를 들어야 하나? 의문이다.

 

 

728x90
Posted by 댕기사랑
,