相关疑难解决方法(0)

Oracle中的临时表与全局临时表有什么区别?

我听过这两个术语"临时表"和"全局临时表"在类似的上下文中使用了很多.

两者有什么区别?

database oracle temp-tables

29
推荐指数
4
解决办法
6万
查看次数

删除全局临时表

2个单独的问题.

  1. 我正在使用此脚本删除表[求助]

    BEGIN
        EXECUTE IMMEDIATE 'DROP TABLE_NAME';
        DBMS_OUTPUT.PUT_LINE ('Global table TABLE_NAME Dropped');
        EXCEPTION
            WHEN OTHERS THEN
                DBMS_OUTPUT.PUT_LINE ('Global table TABLE_NAME Doesn''t exist.');
    END;
    /
    
    Run Code Online (Sandbox Code Playgroud)

无论如何,如果表"不存在"或者在某些其他会话中使用它(在这种情况下它将被锁定且无法删除),我可以区分.我不确定我是否可以在user_tables中看到该表存在.我不完全了解权限.

我现在已经添加了这个代码

WHEN OTHERS THEN
        i_code  :=  SQLCODE;
        v_errm  :=  SUBSTR(SQLERRM, 1, 64);
  if i_code = -942 THEN
    DBMS_OUTPUT.PUT_LINE ('TABLE_NAME doesn''t exist. Script will continue to create it');
  ELSE
    DBMS_OUTPUT.PUT_LINE ('Error dropping temporary table. The error code is ' || i_code || '- ' || v_errm);
  END IF ;
Run Code Online (Sandbox Code Playgroud)

我明白了.在这样的每个程序结束时

END PROCEDURE_NAME;
.
/ …
Run Code Online (Sandbox Code Playgroud)

oracle ddl plsql temp-tables

11
推荐指数
2
解决办法
10万
查看次数

为什么这里需要EXECUTE IMMEDIATE?

我是一个SQL Server用户,我有一个小项目要使用Oracle,所以我试图了解Oracle的一些特性,我认为我需要一些帮助来更好地理解以下情况:

我想在创建之前测试一个临时表是否存在,所以我在这里有这个代码:

DECLARE
  table_count INTEGER;
  var_sql VARCHAR2(1000) := 'create GLOBAL TEMPORARY table TEST (
            hello varchar(1000) NOT NULL)';
BEGIN
  SELECT COUNT(*) INTO table_count FROM all_tables WHERE table_name = 'TEST';

  IF table_count = 0 THEN
    EXECUTE IMMEDIATE var_sql;
  END IF;
END;
Run Code Online (Sandbox Code Playgroud)

它正常工作,所以在我执行一次之后,我在我的IF上添加了一条else语句:

ELSE
  insert into test (hello) values ('hi');
Run Code Online (Sandbox Code Playgroud)

再次执行它,并在我的测试表中添加了一行.

好的,我的代码已经准备就绪,所以我删除了临时表并尝试再次运行整个语句,但是当我这样做时,我收到以下错误:

ORA-06550: line 11, column 19:
PL/SQL: ORA-00942: table or view does not exist
ORA-06550: line 11, column 7:
PL/SQL: SQL Statement ignored
06550. 00000 -  "line %s, column %s:\n%s" …
Run Code Online (Sandbox Code Playgroud)

oracle plsql execute-immediate oracle12c

4
推荐指数
1
解决办法
896
查看次数