先通过一定方法得到下一个月大日期,并将其放入了数组
da(1)=2010-06-01
da(2)=2010-06-02
da(3)=2010-06-03
da(4)=2010-06-04
da(5)=2010-06-05
.......
现在想创建一张表,字段名就是这个日期值
但'CREATE TABLE TFCDHZB_TB (SJD VARCHAR2(50),da(1) varchar2(100),
da(2) varchar2(100),da(3) varchar2(100),da(4) varchar2(100),da(5) varchar2(100),
da(6) varchar2(100),da(7) varchar2(100),da(8) varchar2(100),da(9) varchar2(100),
da(10) varchar2(100),da(11) varchar2(100),da(12) varchar2(100),da(13) varchar2(100),
da(14) varchar2(100),da(15) varchar2(100),da(16) varchar2(100),da(17) varchar2(100),
da(18) varchar2(100),da(19) varchar2(100),da(20) varchar2(100),da(21) varchar2(100),
da(22) varchar2(100),da(23) varchar2(100),da(24) varchar2(100),da(25) varchar2(100),
da(26) varchar2(100),da(27) varchar2(100),da(28) varchar2(100),da(29) varchar2(100),
da(30) varchar2(100))'
时被告知da(1)...是无效的类型,da()已经是varchar2类型
主要想生成动态表,遇到这样的问题该如何解决
谢谢
da(1)=2010-06-01
da(2)=2010-06-02
da(3)=2010-06-03
da(4)=2010-06-04
da(5)=2010-06-05
.......
现在想创建一张表,字段名就是这个日期值
但'CREATE TABLE TFCDHZB_TB (SJD VARCHAR2(50),da(1) varchar2(100),
da(2) varchar2(100),da(3) varchar2(100),da(4) varchar2(100),da(5) varchar2(100),
da(6) varchar2(100),da(7) varchar2(100),da(8) varchar2(100),da(9) varchar2(100),
da(10) varchar2(100),da(11) varchar2(100),da(12) varchar2(100),da(13) varchar2(100),
da(14) varchar2(100),da(15) varchar2(100),da(16) varchar2(100),da(17) varchar2(100),
da(18) varchar2(100),da(19) varchar2(100),da(20) varchar2(100),da(21) varchar2(100),
da(22) varchar2(100),da(23) varchar2(100),da(24) varchar2(100),da(25) varchar2(100),
da(26) varchar2(100),da(27) varchar2(100),da(28) varchar2(100),da(29) varchar2(100),
da(30) varchar2(100))'
时被告知da(1)...是无效的类型,da()已经是varchar2类型
主要想生成动态表,遇到这样的问题该如何解决
谢谢
s_sql := 'CREATE TABLE TFCDHZB_TB (SJD VARCHAR2(50),'
|| da(1) || ' varchar2(100),'
|| da(2) || ' varchar2(100),'
...
|| da(30)||' varchar2(100))';
execute immediate s_sql;
2 p_day NUMBER;
3 p_sql VARCHAR2(4000);
4 BEGIN
5 SELECT TO_CHAR(LAST_DAY(SYSDATE),'DD') INTO p_day FROM DUAL;
6 p_sql := 'CREATE TABLE TFCDHZB_TB(SJD VARCHAR2(50),';
7 FOR I IN 1..p_day LOOP
8 --动态拼接sql 字段不可为da(1)这种形式 否则oracle不识别
9 p_sql :=p_sql || 'DA' || I || ' ' || 'VARCHAR2(100),';
10 END LOOP;
11 p_sql := SUBSTR(p_sql,1,LENGTH(p_sql)-1);
12 p_sql := p_sql || ')';
13 EXECUTE IMMEDIATE p_sql;
14 dbms_output.put_line('TFCDHZB_TB IS CREATED');
15 END;
16 /
TFCDHZB_TB IS CREATED
PL/SQL procedure successfully completed
SQL> desc TFCDHZB_TB
Name Type Nullable Default Comments
---- ------------- -------- ------- --------
SJD VARCHAR2(50) Y
DA1 VARCHAR2(100) Y
DA2 VARCHAR2(100) Y
DA3 VARCHAR2(100) Y
DA4 VARCHAR2(100) Y
DA5 VARCHAR2(100) Y
DA6 VARCHAR2(100) Y
DA7 VARCHAR2(100) Y
DA8 VARCHAR2(100) Y
DA9 VARCHAR2(100) Y
DA10 VARCHAR2(100) Y
DA11 VARCHAR2(100) Y
DA12 VARCHAR2(100) Y
DA13 VARCHAR2(100) Y
DA14 VARCHAR2(100) Y
DA15 VARCHAR2(100) Y
DA16 VARCHAR2(100) Y
DA17 VARCHAR2(100) Y
DA18 VARCHAR2(100) Y
DA19 VARCHAR2(100) Y
DA20 VARCHAR2(100) Y
DA21 VARCHAR2(100) Y
DA22 VARCHAR2(100) Y
DA23 VARCHAR2(100) Y
DA24 VARCHAR2(100) Y
DA25 VARCHAR2(100) Y
DA26 VARCHAR2(100) Y
DA27 VARCHAR2(100) Y
DA28 VARCHAR2(100) Y
DA29 VARCHAR2(100) Y
DA30 VARCHAR2(100) Y
DA31 VARCHAR2(100) Y
s_sql := 'CREATE TABLE TFCDHZB_TB (SJD VARCHAR2(50), "' || da(1) || '" varchar2(100),"' || da(2) || '" varchar2(100),"' ... || da(30)||'" varchar2(100))';
execute immediate s_sql;