Plsql 如何在Pl/SQL中正确创建一个过程,在这个过程中我创建了一个表并使用了一个游标
我想做的作业是 “创建一个程序,将出生在某一特定地区的所有总统的姓名放在其中 状态,在临时表中。显示此表的内容。“ 程序符合要求,但当我尝试调用它时,它会给我:Plsql 如何在Pl/SQL中正确创建一个过程,在这个过程中我创建了一个表并使用了一个游标,plsql,procedure,create-table,database-cursor,Plsql,Procedure,Create Table,Database Cursor,我想做的作业是 “创建一个程序,将出生在某一特定地区的所有总统的姓名放在其中 状态,在临时表中。显示此表的内容。“ 程序符合要求,但当我尝试调用它时,它会给我: 00000-“表或视图不存在” 错误(8,5):PLS-00103:在预期以下情况之一时遇到符号“创建”:开始函数pragma过程子类型当前光标删除之前存在 我已经被困了一段时间了。有人知道我做错了什么吗 到目前为止,我的代码是: CREATE OR REPLACE PROCEDURE stateofpresident(p_state
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解释器不知道需要什么,create语法无效。该语句可以编译,因为在编译时它是格式正确的字符串。这就是为什么尽可能避免使用动态SQL的原因。您的脚本还有一个附加错误。最后一次选择将失败,因为表状态ws不仅已创建,而且已在过程中删除。最后,仅供参考,整个FOR cursor和cursor本身是完全不必要的,整个操作可以通过一条语句完成:查看结构
Insert into table_name(columns)
Select columns ...
因为这显然是一个作业或教程,我会留下确切的研究