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

我想做的作业是 “创建一个程序,将出生在某一特定地区的所有总统的姓名放在其中 状态,在临时表中。显示此表的内容。“

程序符合要求,但当我尝试调用它时,它会给我:

  • 00000-“表或视图不存在” 错误(8,5):PLS-00103:在预期以下情况之一时遇到符号“创建”:开始函数pragma过程子类型当前光标删除之前存在
  • 我已经被困了一段时间了。有人知道我做错了什么吗

    到目前为止,我的代码是:

    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 ... 
    
    因为这显然是一个作业或教程,我会留下确切的研究