读书人

Oracle 有关问题

发布时间: 2012-05-24 11:55:41 作者: rapoo

Oracle 问题
给出数据表名,根据表名查询出列名,根据列的数据类型插入为空的数据,比如 int 插入 0 VARCHAR2插入“”等等
求个SQL 怎么解决

[解决办法]

SQL code
CREATE TABLE T(ID INT,XH INT,XM VARCHAR2(10));INSERT INTO T VALUES (1,NULL,'A');INSERT INTO T VALUES (2,2,'B');INSERT INTO T VALUES (3,NULL,NULL);INSERT INTO T VALUES (4,4,NULL);INSERT INTO T VALUES (5,NULL,NULL);COMMIT;CREATE OR REPLACE PROCEDURE PRO_UPDATE_TEST(I_TABLE_NAME VARCHAR2)ASV_UPDATE_SQL VARCHAR2(4000);BEGIN  V_UPDATE_SQL := 'UPDATE '||I_TABLE_NAME||' SET ';  FOR I IN (SELECT T.COLUMN_NAME,T.DATA_TYPE FROM USER_TAB_COLUMNS T WHERE T.TABLE_NAME='T') LOOP     V_UPDATE_SQL := V_UPDATE_SQL||' '||I.COLUMN_NAME||'=NVL('||I.COLUMN_NAME||',';     case i.data_type     when 'NUMBER'  THEN          v_update_sql := v_update_sql||'0),';     when 'INT'  THEN          v_update_sql := v_update_sql||'0),';     when 'INTEGER'  THEN          v_update_sql := v_update_sql||'0),';     when 'VARCHAR2' THEN          V_UPDATE_SQL:= V_UPDATE_SQL||'''''),';     ELSE          V_UPDATE_SQL:= V_UPDATE_SQL||'NULL),';      END CASE;  END LOOP;  V_UPDATE_SQL:= TRIM(',' FROM V_UPDATE_SQL);  DBMS_OUTPUT.put_line(V_UPDATE_SQL);  EXECUTE IMMEDIATE V_UPDATE_SQL;  COMMIT;END;SQL> SELECT * FROM T;                                      ID                                      XH XM--------------------------------------- --------------------------------------- ----------                                      1                                         A                                      2                                       2 B                                      3                                                                               4                                       4                                       5                                          SQL> EXEC PRO_UPDATE_TEST('T'); PL/SQL procedure successfully completed SQL> SELECT * FROM T;                                      ID                                      XH XM--------------------------------------- --------------------------------------- ----------                                      1                                       0 A                                      2                                       2 B                                      3                                       0                                       4                                       4                                       5                                       0 

读书人网 >oracle

热点推荐