创建表,然后将数据从另一个表插入到新表中
Posted
技术标签:
【中文标题】创建表,然后将数据从另一个表插入到新表中【英文标题】:Create table and then insert data into the new table from another table 【发布时间】:2015-07-09 07:42:18 【问题描述】:我正在创建一个名为 emp_inforamtion 的表,并检查该表是否存在于数据库中,如果不存在则创建表,然后将银行表中的数据插入到 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;
/
执行上述游标后发现以下错误:
ORA-06550:第 30 行,第 16 列:PL/SQL:ORA-00942:表或视图不存在 ORA-06550:第 29 行,第 11 列:PL/SQL:忽略 SQL 语句
【问题讨论】:
你在哪里检查存在?查看您尝试访问的第 30 行第 16 列;我们这里没有任何行号。 我只是给了你一些提示。 感谢您的回复。 第 30 行 INTO EMP_INFORMATION...语句,第 16 列以 EMP_INFORMATION 开头 我认为表没有创建,当它试图将数据插入该表时,它会给出错误,说表或视图不存在......是吗? 【参考方案1】:当您在匿名块中使用 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;
/
【讨论】:
以上是关于创建表,然后将数据从另一个表插入到新表中的主要内容,如果未能解决你的问题,请参考以下文章