问题描述
我想做的作业是 “制定程序,将所有出生的总统的姓名放在一个特定的 状态,在一个临时表中。显示该表的内容。“
该过程符合要求,但是当我尝试调用它时,它会给我:
- 00000-“表或视图不存在” 错误(8,5):PLS-00103:预期以下情况之一时遇到符号“ CREATE”:begin function pragma procedure子类型类型当前游标已删除
我已经被卡住了一段时间了。有人知道我在做什么错吗?
到目前为止,我的代码是:
CREATE OR REPLACE PROCEDURE stateofpresident(p_state president.state_born%TYPE)
AS
CURSOR c_state IS
SELECT *
FROM president;
BEGIN
execute immediate 'CREATE TABLE presidentFromState;
(
president_name VARCHAR2
)';
FOR r_state IN c_state LOOP
IF(p_state = r_state.state_born) THEN
execute immediate 'INSERT INTO presidentFromState VALUES(r_state.pres_name)';
commit;
END IF;
END LOOP;
execute immediate 'DROP TABLE presidentFromState';
END stateofpresident;
/
SET SERVEROUT ON
BEGIN
stateofpresident('VIRGINIA');
END;
/
SELECT *
FROM presidentFromState;
解决方法
错误的直接原因是“ presidentFromState;”处的分号(;)。在运行过程中,fhat终止该语句,并且此时的SQL解释器不知道需要什么,因此创建语法无效。该语句之所以编译是因为在编译时它是格式正确的字符串。这就是为什么应尽可能避免使用动态SQL的原因。您的脚本还存在其他错误。您的最后一次选择将失败,因为不仅创建了表PresidentFromState,而且还删除了该表。最后,仅需一个FYI,就完全不需要整个FOR游标和游标本身,可以完成的整个操作就是一条语句:查看结构
Insert into table_name(columns)
Select columns ...
由于这显然是一项作业或教程,因此我将为您的研究提供准确的信息。