Truncate table dentro de un Procedure

Javier-X-A-M-M
20 de Agosto del 2008
Tengo un procedimiento en el cual se tiene que borrar una tabla por completo para luego almacenarle datos, antes este proc hacía un delete pero ahora como la tabla es muy grande el procedimiento me truena ya que el segmento de rollback es muy grande, estoy tratando de utilizar el truncate table en lugar del delete pero al compilar el proc me sale el siguiente error :
PLS-00103: Encountered the symbol "TABLE" when expecting one of the following:
:= . ( @ % ;

Alguien de ustedes podría ayudarme.

Saludos y gracias de antemano.

a
20 de Agosto del 2008
pon todo lo que escribes y el error....

Jota 2006
20 de Agosto del 2008
Estimado Javier, buenos dias.

Supongo que pones algo parecido a esto : TRUNCATE TABLE TU_TABLA;

Esto en pl-sql no es correcto, si lo quieres meter en pl-sql tienes que hacerlo así :

EXECUTE IMMEDIATE \'TRUNCATE TABLE TU_TABLA\'

Ponlo así y ya veras como te funciona.

Un saludo

Jota 2006
20 de Agosto del 2008
Ponlo si las barritas estas

Se han puesto solas

:-)


andrewsreid
20 de Agosto del 2008
Aquí está una versión que funciona también con Oracle 7:

SQL> @temp
SQL> SET ECHO ON
SQL> CREATE TABLE ANDREWS_TABLE
2 AS SELECT SYSDATE TODAYS_DATE
3 FROM DUAL
4 /

Table created.

SQL> SELECT TODAYS_DATE BEFORE_TRUNCATE
2 FROM ANDREWS_TABLE
3 /

BEFORE_TR
---------
07-DEC-05

SQL> DECLARE
2 CID INTEGER;
3 EXECUTED INTEGER;
4 DYNAMIC_SQL_STATEMENT VARCHAR2(200);
5 BEGIN
6 CID:= DBMS_SQL.OPEN_CURSOR;
7 DYNAMIC_SQL_STATEMENT := \'TRUNCATE TABLE ANDREWS_TABLE\';
8 DBMS_SQL.PARSE(CID, DYNAMIC_SQL_STATEMENT, DBMS_SQL.V7);
9 EXECUTED := DBMS_SQL.EXECUTE(CID);
10 DBMS_SQL.CLOSE_CURSOR(CID);
11 END;
12 /

PL/SQL procedure successfully completed.

SQL> SELECT TODAYS_DATE AFTER_TRUNCATE
2 FROM ANDREWS_TABLE
3 /

no rows selected

SQL> DROP TABLE ANDREWS_TABLE
2 /

Table dropped.

SQL>


andrewsreid
20 de Agosto del 2008
Esta versión es más sencilla.
No funciona con Oracle 7 pero funciona con Oracle 8 y 9:

SQL> @temp
SQL> SET ECHO ON
SQL> CREATE TABLE ANDREWS_TABLE
2 AS SELECT SYSDATE TODAYS_DATE
3 FROM DUAL
4 /

Table created.

SQL> SELECT TODAYS_DATE BEFORE_TRUNCATE
2 FROM ANDREWS_TABLE
3 /

BEFORE_TR
---------
07-DEC-05

SQL> DECLARE
2 DYNAMIC_SQL_STATEMENT VARCHAR2(200);
3 BEGIN
4 DYNAMIC_SQL_STATEMENT := 'TRUNCATE TABLE ANDREWS_TABLE';
5 EXECUTE IMMEDIATE DYNAMIC_SQL_STATEMENT;
6 END;
7 /

PL/SQL procedure successfully completed.

SQL> SELECT TODAYS_DATE AFTER_TRUNCATE
2 FROM ANDREWS_TABLE
3 /

no rows selected

SQL> DROP TABLE ANDREWS_TABLE
2 /

Table dropped.

SQL>


Jota 2006
20 de Agosto del 2008
Correctisimo.

Pero fijate al usar sql dinamico toda la parafernalia que has tenido que montar para hacer un truncate table.

Saludos