首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle PL/SQL在游标中创建表?

问Oracle PL/SQL在游标中创建表?
EN

Stack Overflow用户
提问于 2015-02-26 16:38:32
回答 1查看 8.3K关注 0票数 0

我对PL/SQL比较陌生,所以请容忍我。我正在创建两个表,它们将在FOR循环游标中使用。我的目的是在开始时(在游标循环之前)创建这两个表,在需要清除游标循环时在游标循环中截断它们,并插入新值,然后在游标循环完成后将它们删除。(在稍微看了一下之后,我认为这可以用REF游标来完成,但是我不太清楚如何使用它,所以我决定继续使用第一种方法。)

我尝试在声明部分中创建表,然后在循环开始之前在BEGIN部分中创建表,但是它会引发错误'ORA-065500和PLS-00103 -在期望begin函数实用化时遇到符号创建.‘请注意,在循环结束后,但在游标的结束部分之前,我将删除表。

我是否应该在游标外,在声明部分之前创建表,并在游标结束部分之后删除它们?我认为应该有可能在游标中创建永久的甲骨文表?

更新:张贴代码在这里-

1)

代码语言:javascript
复制
DECLARE
  CREATE TABLE T1
    (
      col1 VARCHAR2(128),
      col2  VARCHAR2(128),
      col3 NUMBER(3) NOT NULL,
      col3 FLOAT(100)
    );

  CREATE TABLE T2 AS
  SELECT * FROM other_table WHERE 1 = 0;

CURSOR CUR IS ...
BEGIN

       FOR rec IN CUR
       LOOP
       --Do stuff here
         END LOOP;

Drop table T1;
Drop table T2;
END;
/

2)

代码语言:javascript
复制
DECLARE

CURSOR CUR IS ...
BEGIN

  CREATE TABLE T1
    (
      col1 VARCHAR2(128),
      col2  VARCHAR2(128),
      col3 NUMBER(3) NOT NULL,
      col3 FLOAT(100)
    );

  CREATE TABLE T2 AS
  SELECT * FROM other_table WHERE 1 = 0;

  FOR rec IN CUR
  LOOP
  --Do stuff here
  END LOOP;

  Drop table T1;
  Drop table T2;
END;
/

(1)和(2)都不起作用。

更新-我们需要立即执行吗?我怎么知道什么时候需要立即执行?我们是否还需要立即执行以截断游标中的表?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-26 17:48:39

通常在PL/SQL过程中不执行DDL(创建、更改、删除)。如果需要一个表来存储一些临时数据,则可以为此目的创建临时表。在您的例子中,我首先创建表

代码语言:javascript
复制
CREATE GLOBAL TEMPORARY TABLE T1
  (
    col1 VARCHAR2(128),
    col2  VARCHAR2(128),
    col3 NUMBER(3) NOT NULL,
    col3 FLOAT(100)
  );

CREATE GLOBAL TEMPORARY TABLE T2 AS
SELECT * FROM other_table WHERE 1 = 0;

然后手术就会像这样

代码语言:javascript
复制
DECLARE
CURSOR CUR IS ...
BEGIN
       FOR rec IN CUR
       LOOP
       --Do stuff here
         END LOOP;

DELETE FROM T1;
DELETE FROM T2;
END;
/

当然,之后不会删除表,但我认为您希望定期使用PL/SQL过程,而不仅仅是一次,对吧?

如果您仍然希望在过程中使用动态sql (立即执行)。但是,您必须知道DDL操作执行隐式提交,因此您的过程不会是一个原子事务。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28747859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档