【问题标题】:How to correctly make a procedure in Pl/SQL in which I create a TABLE and use a CURSOR如何在 Pl/SQL 中正确创建一个过程,在该过程中我创建一个表并使用一个游标
【发布时间】:2020-09-30 14:59:04
【问题描述】:

我要做的任务是 “创建一个程序,将所有出生的总统的名字放在一个特定的地方 状态,在一个临时表中。显示此表的内容。”

该过程符合但当我尝试调用它时,它给了我:

  1. 00000 - “表或视图不存在” 错误(8,5):PLS-00103:在预期以下情况之一时遇到符号“CREATE”:开始函数杂注过程子类型当前光标删除之前存在

我已经被困了一段时间了。有谁知道我做错了什么?

到目前为止我的代码是:

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;

【问题讨论】:

    标签: plsql procedure create-table database-cursor


    【解决方案1】:

    您的错误的直接原因是“presidentFromState;”处的分号 (;)在运行 fhat 终止语句并且 SQL 解释器此时不知道需要什么,创建语法无效。该语句可以编译,因为在编译时它是一个格式正确的字符串。这就是为什么应该尽可能避免使用动态 SQL。您的脚本还有一个额外的错误。您的最后一次选择将失败,因为表 PresidentFromState 不仅在过程中创建而且在过程中被删除。最后,只是一个FYI,整个FOR游标和游标本身是完全没有必要的,整个操作可以完成一个语句:看结构

    Insert into table_name(columns)
       Select columns ... 
    

    因为这显然是一个作业或教程,所以我会留下确切的内容供您研究。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-22
      • 2011-12-20
      • 2015-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-18
      • 1970-01-01
      相关资源
      最近更新 更多