로우값.변수값(스키마명).테이블명 이런식으로 입력하고싶습니다 ㅜ 0 4 1,966

by 김태성 [PL/SQL] [2015.03.30 23:44:42]


안녕하세요. 회사에서 11시까지 낑낑대다가 결국 해결못하고 집에와서 질문드립니다 ㅜㅜ

oracle sql로 개발중인데 잘 안되는게있어서 질문드립니다.

소스가 정확히 기억이 안나서 뭘 하려는지 알 수 있는정도록 적겠습니다 ㅜㅜ

for  i SELECT 유저정보, 라인코드, 사업부코드 FROM workTable

IN INSERT INTO i.사업부코드(유저코드, 등등).테이블명 values(i.유저코드, 등등)

이런식으로 하고싶습니다 ㅜ...소스가 엉망이라 매우 죄송합니다 ;;

회사에 있는 예제 소스를 보니까 for로 테이블을 검색해서 거기에 있는 내용을 가지고 다른 테이블을 insert하는게 있길래 이용해보려고 했습니다.

저 worktable에 있는 정보로 루프를 돌리면서 몇몇 테이블에 값을 insert해야 하는데 스키마가 하나가 아니라서 테이블이름앞에 스키마명을 명시해줘야합니다.

그냥 스키마명 고정으로 예를들어서 KB_COM_A.TABLE1 이런식으로 하면되는데 위에적은것처럼 로우값인 i에 들어있는 부서코드 -> i.부서코드.테이블명 이렇게 .을 두개써서 하면 안되네요 ㅜㅜ

참고로 i.유저코드는 잘 됩니다...

물어봤더니 EXECUTE immediate 쓰면되지않을까? 라길래 찾아서 이것저것 써봤는데 잘 안되네요ㅠ.ㅠ..

내일 아침까지 답변안달려있으면 회사가서 아침일찍 소스 제대로 써놓겠습니다..

일에 너무 못따라가서 이번주는 새벽까지 공부좀해야겠네요 ㅜㅜ. 아시는분 계시면 도움좀 주시면 감사하겠습니다.

by 개발뉴비 [2015.03.31 08:45:20]
-- 이런걸 원하시는지 모르겠네요.
​BEGIN
    FOR A0 IN (
        SELECT 
            UserInfo, LineCd, DeptCd 
          FROM WorkTable
    ) LOOP
        INSERT INTO TT(UserInfo, LineCd, DeptCd)
        VALUES(A0.UserInfo, A0.LineCd, A0.DeptCd);
    END LOOP;
END;

by 마농 [2015.03.31 10:17:26]

변수값과 객체명은 구별됩니다.
변수값을 객체명처럼 사용할수는 없습니다.
따라서 동적쿼리를 사용해야 합니다.
변수값을 문자열로 연결하여 쿼리를 만들고 Execute Immediate 로 실행하시면 됩니다.

v_sql := 'INSERT INTO ' || i.부서코드 || '.테이블명 ';
v_sql := v_sql || 'VALUES(:v1, :v2, :v3)'
EXECUTE IMMEDIATE v_sql USING i.유저코드, i.기타, i.등등;

 


by 개발뉴비 [2015.03.31 11:20:04]

아... 사업부 코드의 값이 스키마 명이 되는거였군요....

제대로 이해를 못했네요...;;


by 김태성 [2015.03.31 23:00:09]

두분 답변 감사합니다 ^^

EXECUTE IMMEDIATE로 해결했습니다. 어제 제가 사용법을 잘 몰라서 안됐었네요 ^^

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입