2016-12-01 4 views
-3

私が使用したことがない神託(だけT-SQL)レコードとストアドプロシージャを使用してパッケージを作成する方法は?オラクル

私はレコードを持っているし、2つのストアドプロシージャ

/*私が使用したことがないパッケージ 私にこのレコードを使用する必要がありますパッケージを作成する必要がありますあなたは、単に中/更新レコードを挿入する必要がある場合は(電話またはパッケージをステートメ) 私は、更新のための第3のシステムでそれを呼び出したり、人を挿入する必要がある) */

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

PL/SQLを使用したことがないと言った場合、テーブルを変更するためにレコードを定義する必要があると思われるものは何ですか?あなたの究極の目標は何ですか? –

+0

私はパッケージ内のレコードを作成し、このレコードをpersonテーブルの挿入/更新に使用する必要があります – angel

+0

目標は「パッケージを挿入/更新するパッケージを作成する」 – angel

答えて

1

起動する方法を知りませんテーブルを定義する必要はありませんあなたは簡単な方法を見つけることができます。ただし、作成およびパッケージの使用方法については、お使いのヘッダの宣言だけで固定されており、多少の誤差があり

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; 

しかし、パッケージのヘッダーは、あなたの手順を記述体、なしでは何もしません。 ;例えば:あなたのパッケージが作成されたら

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; 

、あなたは、この方法(プロシージャまたはパッケージではなく、パッケージ自体に含まれる関数を呼び出す)その手続きと関数を呼び出すことができます。

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

Aleksej、レコードの構造が行の構造と同じ場合は単純化することができます - レコード型宣言の必要は全くありません。 [ここに例があります](http://rextester.com/KQNR17007)。しかし、OPのようにデータが第三者のシステムから来ているとすれば、オラクルのレコードタイプはスキーマレベルのオブジェクトタイプに変換してそれに応じてマッピングする必要があります。しかし、我々は確かにプロセスがそこで動作するかどうかわからない、OPは共有したくない;-) –

関連する問題