webentwicklung-frage-antwort-db.com.de

löschen einer globalen temporären Tabelle

2 Separate Fragen.

  1. Ich verwende dieses Skript, um eine Tabelle zu löschen [Gelöst]

    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;
    /
    

Gibt es trotzdem einen Unterschied, ob die Tabelle "nicht existiert" oder in anderen Sitzungen verwendet wird (in diesem Fall würde sie gesperrt und konnte nicht gelöscht werden) Ich bin nicht sicher, ob ich sehen kann, dass die Tabelle in user_tables vorhanden ist. Ich bin mir der Berechtigungen nicht vollständig bewusst.

Ich habe diesen Code jetzt hinzugefügt

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 ;

2. Ich sehe. am Ende jeder Prozedur wie folgt

END PROCEDURE_NAME;
.
/
sho err;

Ich verstehe einfach nicht warum. ist hier. Ist es die Syntax oder was?

10
x.509

Schritt 1. Finden Sie heraus, welche Fehler Sie abfangen möchten:

Wenn die Tabelle nicht existiert:

SQL> drop table x;
drop table x
           *
ERROR at line 1:
ORA-00942: table or view does not exist

Wenn die Tabelle verwendet wird:

SQL> create global temporary table t (data varchar2(4000));

Table created.

Verwenden Sie die Tabelle in einer anderen Sitzung. (Beachten Sie kein Commit oder irgendetwas nach dem Insert.)

SQL> insert into t values ('whatever');

1 row created.

Versuchen Sie, in der ersten Sitzung zu löschen:

SQL> drop table t;
drop table t
           *
ERROR at line 1:
ORA-14452: attempt to create, alter or drop an index on temporary table already in use

Also die zwei Fehler zu fangen:

  1. ORA-00942: Tabelle oder Ansicht ist nicht vorhanden 
  2. ORA-14452: Versuch, einen Index für eine bereits verwendete temporäre Tabelle zu erstellen, zu ändern oder zu löschen

Prüfen Sie, ob die Fehler vordefiniert sind . Sie sind nicht Sie müssen also wie folgt definiert werden:

create or replace procedure p as
    table_or_view_not_exist exception;
    pragma exception_init(table_or_view_not_exist, -942);
    attempted_ddl_on_in_use_GTT exception;
    pragma exception_init(attempted_ddl_on_in_use_GTT, -14452);
begin
    execute immediate 'drop table t';

    exception 
        when table_or_view_not_exist then
            dbms_output.put_line('Table t did not exist at time of drop. Continuing....');

        when attempted_ddl_on_in_use_GTT then
            dbms_output.put_line('Help!!!! Someone is keeping from doing my job!');
            dbms_output.put_line('Please rescue me');
            raise;
end p;

Und Ergebnisse zuerst ohne t:

SQL> drop table t;

Table dropped.

SQL> exec p;
Table t did not exist at time of drop. Continuing....

PL/SQL procedure successfully completed.

Und jetzt mit t im Einsatz:

SQL> create global temporary table t (data varchar2(4000));

Table created.

In einer anderen Sitzung:

SQL> insert into t values (null);

1 row created.

Und dann in der ersten Sitzung:

SQL> exec p;
Help!!!! Someone is keeping from doing my job!
Please rescue me
BEGIN p; END;

*
ERROR at line 1:
ORA-14452: attempt to create, alter or drop an index on temporary table already in use
ORA-06512: at "SCHEMA_NAME.P", line 16
ORA-06512: at line 1
13
-- Zuerst temporäre Tabelle abschneiden 
 SQL> TRUNCATE TABLE test_temp1; 

-- Dann temporäre Tabelle löschen 
 SQL> DROP TABLE test_temp1; 
15
Nader
  1. Fahren Sie den Apache-Server herunter, indem Sie unten in PuTTYcd $ADMIN_SCRIPTS_HOME./adstpall.sh laufen.
  2. Löschen Sie die globalen temporären Tabellen drop table t;

Das wird trainieren ..

0
Suresh Kalvoj