I am having a small issue trying to use substitution variables for table names. When I run the below code with a QTR_END
date of 31-DEC-2009
, I get an error because instead of QUARTER = 4
, and ACCYEAR = 2009
, it tries to create a table with the name of:
"ZZ_PLANNING_DATA_TO_NUMBER(TO_CHAR(TO_DATE('&&QTR_END','DD-MM-YYYY'), 'Q'))QTO_NUMBER(EXTRACT (YEAR FROM TO_DATE('&&QTR_END','DD-MM-YYYY')))"
Of course I am trying to create a table "ZZ_PLANNING_DATA_4Q2009"
I don't know how to force the substitution variables to substitute their executed value, instead of just substituting the code. ?
ACCEPT QTR_END DATE PROMPT 'Enter the last day of the period you wish to run (i.e.: 30-JUN-2014).';
DEFINE QUARTER = TO_NUMBER(TO_CHAR(TO_DATE('&&QTR_END','DD-MM-YYYY'), 'Q'));
DEFINE ACCYEAR = TO_NUMBER(EXTRACT (YEAR FROM TO_DATE('&&QTR_END','DD-MM-YYYY')));
DEFINE BACKUP_TABLE_NAME = "ZZ_PLANNING_DATA_&&QUARTER.Q&&ACCYEAR";
CREATE TABLE &&BACKUP_TABLE_NAME COMPRESS NOLOGGING
AS SELECT * FROM ZZ_PLANNING_DATA;
Try this:
ACCEPT QTR_END DATE PROMPT 'Enter the last day of the period you wish to run (i.e.: 30-JUN-2014).';
col quarter form a30 new_value quarter
col accyear form a30 new_value accyear
select TO_CHAR(TO_DATE('&&QTR_END','DD-MM-YYYY'), 'Q') quarter,
TO_CHAR(EXTRACT (YEAR FROM TO_DATE('&&QTR_END','DD-MM-YYYY'))) accyear
from dual;
DEFINE BACKUP_TABLE_NAME = ZZ_PLANNING_DATA_&&QUARTER.Q&&ACCYEAR
prompt quarter: &quarter
prompt accyear: &accyear
prompt backup_table_name: &backup_table_name
CREATE TABLE &&BACKUP_TABLE_NAME COMPRESS NOLOGGING
AS SELECT * FROM ZZ_PLANNING_DATA;
Or, easier I reckon to do it in PLSQL:
ACCEPT QTR_END DATE PROMPT 'Enter the last day of the period you wish to run (i.e.: 30-JUN-2014).';
declare
quarter VARCHAR2(6) := TO_CHAR(TO_DATE('&&QTR_END','DD-MM-YYYY'), 'Q');
accyear VARCHAR2(6) := EXTRACT (YEAR FROM TO_DATE('&&QTR_END','DD-MM-YYYY'));
backup_name varchar2(30) := 'ZZ_PLANNING_DATA_' || QUARTER || 'Q' || ACCYEAR;
begin
execute immediate 'create table ' || backup_name || ' as select * from zz_planning_data';
end;
/
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.