Zona HTML Zona Java Zona PHP Zona ASP Zona Bases de datos
Inicio > Foros > Oracle > Truncate table dentro de un Procedure
-Foros de debate

Oracle
Lista de foros | Lista de mensajes de este foro

Privacidad: Recuerde que la información escrita en los foros de programación es 100% pública y que su ip será registrada asociada a su mensaje. Si encuentra un mensaje fuera de lugar, por favor, notifiquelo para su revisión y eliminación.

Truncate table dentro de un Procedure
Enviado por Javier-X-A-M-M el día 5 de enero de 2006

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.

 
Re: Truncate table dentro de un Procedure
Enviado por a el día 5 de enero de 2006

pon todo lo que escribes y el error....

 
Re: Re: Truncate table dentro de un Procedure
Enviado por Jota 2006 el día 5 de enero de 2006

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

 
Re: Re: Re: Truncate table dentro de un Procedure
Enviado por Jota 2006 el día 5 de enero de 2006

Ponlo si las barritas estas \

Se han puesto solas

:-)

 
Re: Re: Re: Re: Truncate table dentro de un Procedure
Enviado por andrewsreid el día 5 de enero de 2006

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>

 
Re: Re: Re: Re: Re: Truncate table dentro de un Procedure
Enviado por Jota 2006 el día 5 de enero de 2006

Correctisimo.

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

Saludos


 

Re: Re: Re: Re: Re: Truncate table dentro de un Procedure
Enviado por andrewsreid el día 5 de enero de 2006

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>

 
Re: Re: Re: Re: Re: Re: Truncate table dentro de un Procedure
Enviado por Javier-X-A-M-M el día 5 de enero de 2006

Que tal Sres.
Bueno pues muchísimas gracias por su ayuda, sus tips y comentarios me sirvieron de mucho ya que ahora el proc ya esta funcionando correctamente.

Saludos y una vez más gracias.

 
Truncate table dentro de un Procedure
Enviado por Javier Michelet el día 20 de agosto de 2008

Yo utilice asi, esto es desde forms.
declare
DYNAMIC_SQL_STATEMENT VARCHAR2(200);
begin
DYNAMIC_SQL_STATEMENT := 'TRUNCATE TABLE MI_TABLA';
Forms_DDL(DYNAMIC_SQL_STATEMENT);
EXCEPTION
when FORM_TRIGGER_FAILURE then
raise;
when others then
message (SQLERRM);
raise FORM_TRIGGER_FAILURE;
END;

 








Tienda
Patrocinados
 

Copyright © 1999-2006 Programación en castellano. Todos los derechos reservados.
Formulario de Contacto - Datos legales - Publicidad

Hospedaje web y servidores dedicados linux por Ferca Network