2016-12-01 1 views
-3

Ich habe noch nie verwendet Oracle (nur T-SQL)Wie erstellt man ein Paket mit Datensätzen und gespeicherten Prozeduren? Orakel

ich erstellen muß ein Paket, das Datensätze haben muss und diese Aufzeichnung in zwei gespeicherte Prozeduren

/* Ich habe nie verwenden ein Paket I verwendet wissen nicht, wie (Anruf oder das Paket execut) aufzurufen ich brauche es in einem dritten System verlangen Update oder eine Person einfügen) */

CREATE OR REPLACE PACKAGE PKG_CRM_INSERTUPDATE_PERSONAS IS 

/* 
this must to create a stored procedure for insert and update a table 
*/ 
declare 
    TYPE typePersona IS RECORD (
    varNombre: VARCHAR2(200); 
    varApellidoPaterno : VARCHAR2(200); 
    varApellidoMaterno : VARCHAR2(200); 
    varRFC : VARCHAR2(200); 
    varIfe : VARCHAR2(200); 
    varFechaNacimiento : DATE; 
    varNumeroHijos : NUMBER; 
    varIdSituacion : NUMBER; 
    varIdActividad : NUMBER; 
    varIdPais : NUMBER; 
    varIdGenero : VARCHAR2(200); 
    varIdEstadoCivil : NUMBER; 
    varIdLocalidad : NUMBER; 
    varIdPersona : NUMBER; 
    varCURP : VARCHAR2(200); 
    varIdTipoPersona : VARCHAR2(200); 
    varCalle : VARCHAR2(200); 
    varNumeroExterior : VARCHAR2(200); 
    varNumeroPiso : VARCHAR2(200); 
    varNumeroDepartamento : VARCHAR2(200); 
    ) 

END; 
+4

Wenn Sie, wie Sie sagten, PL/SQL noch nie benutzt haben, was bringt Sie auf den Gedanken, dass Sie einen Datensatz definieren müssen, um eine Tabelle zu modifizieren? Was ist dein ultimatives Ziel? –

+0

Ich brauche einen Datensatz in einem Paket erstellen und diesen Datensatz für das Einfügen/Aktualisieren der Person Tabelle verwenden – angel

+0

Das Ziel ist "ein Paket zum Einfügen/Update-Paket erstellen" – angel

Antwort

1

Wenn Sie einfach einfügen müssen/aktualisieren Datensätze in einem Tabelle, Sie müssen wahrscheinlich nicht definieren aufnehmen, aber Sie können leichtere Wege finden.

jedoch über die Entstehung und die Verwendung eines Pakets, Ihre Kopf Erklärung einige Fehler hat, fest gerade:

CREATE OR REPLACE PACKAGE PKG_CRM_INSERTUPDATE_PERSONAS IS 

    TYPE typePersona IS RECORD (
    varNombre VARCHAR2(200), 
    varApellidoPaterno VARCHAR2(200), 
    varApellidoMaterno VARCHAR2(200), 
    varRFC VARCHAR2(200), 
    varIfe VARCHAR2(200), 
    varFechaNacimiento DATE, 
    varNumeroHijos NUMBER, 
    varIdSituacion NUMBER, 
    varIdActividad NUMBER, 
    varIdPais NUMBER, 
    varIdGenero VARCHAR2(200), 
    varIdEstadoCivil NUMBER, 
    varIdLocalidad NUMBER, 
    varIdPersona NUMBER, 
    varCURP VARCHAR2(200), 
    varIdTipoPersona VARCHAR2(200), 
    varCalle VARCHAR2(200), 
    varNumeroExterior VARCHAR2(200), 
    varNumeroPiso VARCHAR2(200), 
    varNumeroDepartamento VARCHAR2(200) 
    ); 

    procedure someProcIn(pIn IN typePersona); 
    procedure someProcInOut(pInOut IN OUT typePersona); 

END; 

Aber ein Paket-Header ohne Körper tut nichts, wo Sie Ihre Prozeduren schreiben ; zum Beispiel:

CREATE OR REPLACE PACKAGE body PKG_CRM_INSERTUPDATE_PERSONAS IS 

    procedure someProcIn(pIn IN typePersona) is 
    begin 
     dbms_output.put_line(pIn.varNombre); 
    end; 

    procedure someProcInOut(pInOut IN OUT typePersona) is 
    begin 
     pInOut.varNombre := 'varNombre value'; 
    end; 

END; 

Sobald Ihr Paket erstellt wird, können Sie die Prozeduren und Funktionen aufrufen (Sie eine Prozedur aufrufen oder eine Funktion in einem Paket enthalten ist, nicht das Paket selbst) so:

declare 
    myVar PKG_CRM_INSERTUPDATE_PERSONAS.typePersona; 
begin  
    -- 
    PKG_CRM_INSERTUPDATE_PERSONAS.someProcInOut(myVar); 
    -- 
    PKG_CRM_INSERTUPDATE_PERSONAS.someProcIn(myVar); 
end;  
+1

Aleksej, wenn die Struktur des Datensatzes mit der Struktur der Zeile identisch ist, kann sie vereinfacht werden - eine Datensatztyp-Deklaration wäre überhaupt nicht erforderlich. [Hier ein Beispiel] (http://rextester.com/KQNR17007). Wenn OP jedoch angibt, dass Daten von einem Drittanbietersystem stammen, müsste der Oracle-Datensatztyp wahrscheinlich in einen Objekttyp auf Schemaebene umgewandelt und entsprechend zugeordnet werden. Aber wir wissen nicht sicher, dass der Prozess dort funktioniert, OP möchte nicht teilen ;-) –

Verwandte Themen