Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Plsql 创建表,然后将数据从另一个表插入到新表中_Plsql - Fatal编程技术网

Plsql 创建表,然后将数据从另一个表插入到新表中

Plsql 创建表,然后将数据从另一个表插入到新表中,plsql,Plsql,我正在创建一个表名emp_information,检查表是否存在于数据库中,如果不存在,则创建表,然后将数据从bank表插入emp_information表中 DECLARE ncount NUMBER; v_sql VARCHAR2(4000); CURSOR c1 IS SELECT bank_code, center_code, bank_name, logo FROM bank WHERE bank_code

我正在创建一个表名emp_information,检查表是否存在于数据库中,如果不存在,则创建表,然后将数据从bank表插入emp_information表中

DECLARE
  ncount NUMBER;
  v_sql  VARCHAR2(4000);
  CURSOR c1
  IS
    SELECT bank_code,
      center_code,
      bank_name,
      logo
    FROM bank
    WHERE bank_code ='607143';
BEGIN
  SELECT COUNT(1) INTO ncount FROM tab WHERE tname LIKE '%EMP_INFORMATION%';
  IF (ncount <= 0) THEN
    DBMS_OUTPUT.PUT_LINE (ncount || 'count');
    BEGIN
      v_sql :=' CREATE TABLE EMP_INFORMATION  
(    
emp_id         VARCHAR2(3),    
emp_name       VARCHAR2(20),    
emp_salary     VARCHAR2(3),    
emp_department VARCHAR2(3)  
)';
      EXECUTE immediate v_sql;
      COMMIT;
      BEGIN
        FOR i IN c1
        LOOP
          INSERT
          INTO EMP_INFORMATION
            (
              emp_id,
              emp_name,
              emp_salary,
              emp_department
            )
            VALUES
            (
              i.bank_code,
              i.bank_name,
              i.center_code,
              i.logo
            );
        END LOOP;
      END;
    END;
  END IF;
  end;
/
声明
n计数;
v_sql VARCHAR2(4000);
光标c1
是
选择银行代码,
中心代码,
银行名称,
标志
从银行
银行代码='607143';
开始
从选项卡中选择COUNT(1)到ncount,该选项卡的名称类似于“%EMP_INFORMATION%”;

如果(ncount在匿名块中使用execute immediate创建表时,使用execute immediate将数据插入其中

DECLARE
  ncount NUMBER;
  v_sql  VARCHAR2(4000);
  CURSOR c1
  IS
    SELECT bank_code,
      center_code,
      bank_name,
      logo
    FROM bank
    WHERE bank_code ='607143';
BEGIN
  SELECT COUNT(1) INTO ncount FROM tab WHERE tname LIKE '%EMP_INFORMATION%';
  IF (ncount <= 0) THEN
    DBMS_OUTPUT.PUT_LINE (ncount || 'count');
    BEGIN
      v_sql :=' CREATE TABLE EMP_INFORMATION  
                (    
                  emp_id         VARCHAR2(3),    
                  emp_name       VARCHAR2(20),    
                  emp_salary     VARCHAR2(3),    
                  emp_department VARCHAR2(3)  
                )';
      EXECUTE IMMEDIATE v_sql;
      BEGIN
        FOR i IN c1
        LOOP
          EXECUTE IMMEDIATE 'INSERT
          INTO EMP_INFORMATION
            (
              emp_id,
              emp_name,
              emp_salary,
              emp_department
            )
            VALUES
            (
              :a,
              :b,
              :c,
              :d
            )' using i.bank_code, i.bank_name, i.center_code, i.logo;
        END LOOP;
      END;
    END;
  END IF;
  end;
/
声明
n计数;
v_sql VARCHAR2(4000);
光标c1
是
选择银行代码,
中心代码,
银行名称,
标志
从银行
银行代码='607143';
开始
从选项卡中选择COUNT(1)到ncount,该选项卡的名称类似于“%EMP_INFORMATION%”;

如果(n计算您在哪里检查是否存在?请查看第30行第16列中您尝试访问的表;我们这里没有任何行号。我只是给了您一些提示。感谢您的回答。第30行在“输入EMP_信息…”语句中,第16列以EMP_信息开始。我认为该表未创建,并且在尝试向中插入数据时该表出现错误,表示表或视图不存在…是吗?