software sistema migracion funciona descargar como actualizar 12c 11g 10g oracle oracle10g ddl

sistema - oracle software



¿Cómo uso CREAR O REEMPLAZAR? (13)

''Crear o reemplazar tabla'' no es posible. Como otros indicaron, puede escribir un procedimiento y / o usar comenzar a ejecutar inmediatamente (...). Debido a que no veo una respuesta sobre cómo (re) crear la tabla, puse una secuencia de comandos como respuesta.

PD: en línea con lo que jeffrey-kemp mencionó: este script debajo NO guardará datos que ya están presentes en la tabla que va a colocar. Debido al riesgo de pérdida de datos, en nuestra empresa solo está permitido alterar las tablas existentes en el entorno de producción, y no está permitido eliminar tablas. Al usar la declaración de la tabla desplegable, tarde o temprano obtendrá a la policía de la compañía parada en su escritorio.

--Create the table ''A_TABLE_X'', and drop the table in case it already is present BEGIN EXECUTE IMMEDIATE '' CREATE TABLE A_TABLE_X ( COLUMN1 NUMBER(15,0), COLUMN2 VARCHAR2(255 CHAR), COLUMN3 VARCHAR2(255 CHAR) )''; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -955 THEN -- ORA-00955: object name already used EXECUTE IMMEDIATE ''DROP TABLE A_TABLE_X''; END IF; END;

¿Estoy en lo cierto al entender que CREAR O REEMPLAZAR significa básicamente "si el objeto existe, soltarlo, y luego crearlo de cualquier manera?"

Si es así, ¿qué estoy haciendo mal? Esto funciona:

CREATE TABLE foo (id NUMBER, title VARCHAR2(4000) DEFAULT ''Default Title'')

Y esto no (ORA-00922: opción faltante o inválido):

CREATE OR REPLACE TABLE foo (id NUMBER, title VARCHAR2(4000) DEFAULT ''Default Title'')

¿Estoy haciendo algo estúpido? Parece que no puedo encontrar mucha documentación sobre esta sintaxis.


Así que he estado usando esto y ha funcionado muy bien: funciona más como un DROP IF EXISTS pero hace el trabajo

DECLARE VE_TABLENOTEXISTS EXCEPTION; PRAGMA EXCEPTION_INIT(VE_TABLENOTEXISTS, -942); PROCEDURE DROPTABLE(PIS_TABLENAME IN VARCHAR2) IS VS_DYNAMICDROPTABLESQL VARCHAR2(1024); BEGIN VS_DYNAMICDROPTABLESQL := ''DROP TABLE '' || PIS_TABLENAME; EXECUTE IMMEDIATE VS_DYNAMICDROPTABLESQL; EXCEPTION WHEN VE_TABLENOTEXISTS THEN DBMS_OUTPUT.PUT_LINE(PIS_TABLENAME || '' NOT EXIST, SKIPPING....''); WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE(SQLERRM); RAISE; END DROPTABLE; BEGIN DROPTABLE(''YOUR_TABLE_HERE''); END DROPTABLE; /

Espero que esto también ayude a la referencia: Error PLS-00103 en PL / SQL Developer


Esto funciona en funciones, procedimientos, paquetes, tipos, sinónimos, activador y vistas.

Actualizar:

Después de actualizar la publicación por tercera vez, reformularé esto:

Esto no funciona en las tablas :)

Y sí, hay documentation sobre esta sintaxis, y no hay opción REPLACE para CREATE TABLE .


La siguiente secuencia de comandos debería hacer el truco en Oracle:

BEGIN EXECUTE IMMEDIATE ''drop TABLE tablename''; EXCEPTION WHEN OTHERS THEN IF sqlcode != -0942 THEN RAISE; END IF; END;


No funciona con tablas, solo funciones, etc.

Aquí hay un sitio con algunos examples .


No hay una tabla de creación o reemplazo en Oracle.

Debes:

DROP TABLE foo; CREATE TABLE foo (....);


Puede usar CORT ( www.softcraftltd.co.uk/cort ). Esta herramienta permite CREAR O REEMPLAZAR la tabla en Oracle. Parece que:

create /*# or replace */ table MyTable( ... -- standard table definition );

Conserva datos.


Si esto es para MS SQL ... El siguiente código siempre se ejecutará sin importar si la tabla ya existe o no.

if object_id(''mytablename'') is not null //has the table been created already in the db Begin drop table mytablename End Create table mytablename (...


Si lo está haciendo en código, primero verifique la tabla en la base de datos utilizando la consulta SELECT table_name FROM user_tables WHERE table_name = ''XYZ''

si se encuentra el registro, truncar la tabla; de lo contrario, crear tabla

Trabaja como Crear o Reemplazar.


Un procedimiento útil para las bases de datos de Oracle sin utilizar excepciones (bajo circunstancias, debe reemplazar user_tables con dba_tables y / o restringir el tablespace en la consulta):

create or replace procedure NG_DROP_TABLE(tableName varchar2) is c int; begin select count(*) into c from user_tables where table_name = upper(tableName); if c = 1 then execute immediate ''drop table ''||tableName; end if; end;


Una de las cosas buenas de la sintaxis es que puedes estar seguro de que CREATE OR REPLACE nunca hará que pierdas datos (lo máximo que perderás es el código, que con suerte habrás almacenado en algún lugar del control de código fuente).

La sintaxis equivalente para las tablas es ALTER, lo que significa que debe enumerar explícitamente los cambios exactos que se requieren.

EDITAR: por cierto, si necesita hacer una DROP + CREAR en un script, y no le importan los errores espurios de "el objeto no existe" (cuando el DROP no encuentra la tabla), puede hacer esta:

BEGIN EXECUTE IMMEDIATE ''DROP TABLE owner.mytable''; EXCEPTION WHEN OTHERS THEN IF sqlcode != -0942 THEN RAISE; END IF; END; /


CREATE OR REPLACE solo se puede usar en funciones, procedimientos, tipos, vistas o paquetes; no funcionará en las tablas.


-- To Create or Replace a Table we must first silently Drop a Table that may not exist DECLARE table_not_exist EXCEPTION; PRAGMA EXCEPTION_INIT (table_not_exist , -00942); BEGIN EXECUTE IMMEDIATE(''DROP TABLE <SCHEMA>.<TABLE NAME> CASCADE CONSTRAINTS''); EXCEPTION WHEN table_not_exist THEN NULL; END; /