테이블명도 concat 가능한가요?
테이블명칭이 날짜별로 바뀌는데 예를들어 이렇게 4월1일자 4월2일자 바뀐다면(생성된다면?)
select id, name, code from A210401001_job where id =10; select id, name, code from A210402001_job where id =10;
이렇게 날짜변환함수와 concat을 사용해서 테이블을 조회 할수 있나요.. 안되서 질문올리는거지만요;;;
select id, name, code from A||to_char(sysdate,'YYMMDD')001_job where id =10;
컬럼에는 되는데 테이블명에는 안되는것 같아서.. 어떤식으로 할 수 있을지..
++ 추가
구글링해서 이런 function을 만들긴 했는데 이것도 컬럼에는 적용되고 테이블명에는 마찬가지..
CREATE OR REPLACE FUNCTION F_YYMMDD RETURN VARCHAR2 IS v_SYSDATE VARCHAR2(20); BEGIN SELECT to_char(SYSDATE,'YYMMDD') into v_SYSDATE FROM DUAL; RETURN(v_SYSDATE); EXCEPTION WHEN OTHERS THEN RETURN(NULL); END; /
++ 추가
혼자 구글링 중이요.. 이 정규식도 활용할 수 있을까요..
SELECT * FROM (SELECT TABLE_NAME, REGEXP_SUBSTR(TABLE_NAME, '\d{2}\d{2}\d{2}')YYMMDD FROM USER_TABLES) WHERE YYMMDD IS NOT NULL AND YYMMDD = to_char(sysdate,'YYMMDD');
SELECT TABLE_NAME FROM USER_TABLES where REGEXP_SUBSTR(TABLE_NAME, '\d{2}\d{2}\d{2}') = to_char(sysdate,'YYMMDD') ;
Object 명 (테이블이름, 칼럼이름 등)을 가변으로 작성하시려면 동적쿼리로 구현하셔야 합니다.
http://www.gurubee.net/lecture/1720 (동적쿼리 참고)
동적쿼리... 는 어렵군요.. ㅜ
이런식으로 linux shell에서 date변수를 받아서 sql을 실행하는 걸로 해보았는데 임시로 될거같기도 하구요..
==== test.sql
select * from A&1001_job;
==== test.sh
#!/bin/bash export v_date=`date "+%y%m%d"` echo $v_date sqlplus product/product@poims @test.sql $v_date
==== run in linux
./test.sh 210401 old : A&1001_job; new : A210401001_job;
++ 추가
shell 안쓰고 해도 되네요..
sqlplus product/product@poims @test.sql `date "+%y%m%d"`