Oracle存储1.1

1.生成一个表的简单sql语句

CREATE OR REPLACE PROCEDURE proc_AutoGenerateSQL
(
  tableName   VARCHAR2 ,--参数 需要操作的表名 大小写区别
  tableType   NUMBER , --  参数  对表操作类型  0 =insert 1 =update 2=select
  sqlOrNet    NUMBER  ,-- 参数 需要生成那种格式sql 1 = sql  0  =net
  tableOutStr OUT VARCHAR2 --参数 输出需要的sql
)
IS
    sql_columns VARCHAR2(2000);
    sql_columnvalues VARCHAR2(2000);
  BEGIN
      BEGIN
        DECLARE
           CURSOR  c_t IS
           SELECT   column_id, column_name, data_type
           FROM user_tab_columns where table_name = ''||tableName||'' order by column_id;
           c_r  c_t%ROWTYPE;
           --开始游标创建需要列和值
                     BEGIN
           OPEN c_t;
           LOOP
           FETCH c_t INTO c_r;
           EXIT WHEN c_t%NOTFOUND;
                   IF  sql_columns<>' ' THEN
                                BEGIN
                                      --sql_columns := sql_columns||','||c_r.column_name;
                              IF c_r.data_type = 'DATE' THEN
                       IF  tableType =1 THEN  -- update
                           IF sqlOrNet = 1 THEN   --1 sql  0 net
                                sql_columns :=sql_columns||','||c_r.column_name||'='||''''||to_char(SYSDATE,'yyyy-MM-dd HH:mm:ss')||'''';
                           ELSE
                                sql_columns :=sql_columns||','||c_r.column_name||'=:'||c_r.column_name;
                           END IF;
                       ELSE
                                                sql_columns := sql_columns||','||c_r.column_name;
                        sql_columnvalues:=sql_columnvalues||','||''''||to_char(SYSDATE,'yyyy-MM-dd HH:mm:ss');
                               END IF ;
                                        ELSIF c_r.data_type = 'NUMBER' THEN
                                           IF  tableType =1 THEN  -- update
                                                   IF sqlOrNet = 1 THEN   --1 sql  0 net
                                                      sql_columns :=sql_columns||','||c_r.column_name||'='||0;
                                                     ELSE
                                                            sql_columns :=sql_columns||','||c_r.column_name||'=:'||c_r.column_name;
                                                   END IF;
                                          ELSE
                                             sql_columns := sql_columns||','||c_r.column_name;
                                           sql_columnvalues:=sql_columnvalues||','||0;
                                             END IF ;
                                        ELSE
                                             IF  tableType =1 THEN  -- update
                                                   IF sqlOrNet = 1 THEN   --1 sql  0 net
                                                  sql_columns :=sql_columns||','||c_r.column_name||'='||'''''';
                                                     ELSE
                                                            sql_columns :=sql_columns||','||c_r.column_name||'=:'||c_r.column_name;
                                                   END IF;
                                           ELSE
                                                    sql_columns := sql_columns||','||c_r.column_name;
                                                  sql_columnvalues:=sql_columnvalues||','||'''''';
                                            END IF ;
                                        END IF ;
                                END ;
                            ELSE
                                     BEGIN
                                        IF c_r.data_type = 'DATE' THEN
                                            IF  tableType =1 THEN  -- update
                                                   IF sqlOrNet = 1 THEN   --1 sql  0 net
                                                      sql_columns :=c_r.column_name||'='||''''||to_char(SYSDATE,'yyyy-MM-dd HH:mm:ss')||'''';
                                                     ELSE
                                                            sql_columns :=c_r.column_name||'=:'||c_r.column_name;
                                                   END IF;
                                           ELSE
                                             sql_columns := sql_columns||c_r.column_name;
                                           sql_columnvalues:=sql_columnvalues||''''||to_char(SYSDATE,'yyyy-MM-dd HH:mm:ss')||'''';
                                             END IF;
                                        ELSIF c_r.data_type = 'NUMBER' THEN
                                              IF  tableType =1 THEN  -- update
                                                         IF sqlOrNet = 1 THEN   --1 sql  0 net
                                                                    sql_columns :=c_r.column_name||'='||0;
                                                         ELSE
                                                                 sql_columns :=c_r.column_name||'=:'||c_r.column_name;
                                                         END IF;
                                                 ELSE
                                                 sql_columns := sql_columns||c_r.column_name;
                                                 sql_columnvalues:=sql_columnvalues||0;
                                                 END IF;
                                        ELSE
                                              IF  tableType =1 THEN  -- update
                                                         IF sqlOrNet = 1 THEN   --1 sql  0 net
                                                                    sql_columns :=c_r.column_name||'='||'''''';
                                                         ELSE
                                                                    sql_columns :=c_r.column_name||'=:'||c_r.column_name;
                                                         END IF;
                                                 ELSE
                                                     sql_columns := sql_columns||c_r.column_name;
                                                     sql_columnvalues:=sql_columnvalues||'''''';
                                                 END IF;
                                        
                                        END IF ;
                                     END;
                          END IF ;
                            
           END LOOP;
           --关闭游标
           CLOSE  c_t;
                     END;
      END;
            --0 =insert 1 =update 2=delete 3=select  
            --生成对于的sql
            IF tableType=0 THEN
      tableOutStr:='insert into '||tableName||' ('||sql_columns||') values('||sql_columnvalues||')';
            ELSIF tableType=1 THEN
            tableOutStr:='update  '||tableName||' set  '||sql_columns;
            ELSE
            tableOutStr:='select   '||sql_columns||' from   '||tableName;
            END IF ;
  END;

原文地址:https://www.cnblogs.com/linsu/p/3488552.html