Quoi, tu ne connais pas PB ? Va falloir parcourir tout le forum alors !

Le forum (ô combien francophone) des utilisateurs de Powerbuilder.

Recherche rapide

Annonce

Certaines rubriques, dont des cours, sont uniquement visibles par les membres du forum ^^.
Dans la rubrique Liens & Références, vous avez accès à un sommaire de téléchargement, profitez-en !
Il existe maintenant un nouveau TOPIC "Votre CV en Ligne" accessible uniquement par demande.

#1 17-02-2011 08:23:54

nico  
Modérateur
Award: bf
Lieu: Plélan le grand
Date d'inscription: 08-02-2007
Messages: 273
Pépites: 13
Banque: 9,223,372,036,854,776,000

Datawindow chargée par une procédure stockée

Je débute avec le PL/SQL.
Je souhaiterais charger une datawindow ayant un argument de type tableau.

A priori, Il n'ai pas possible d'utiliser ce type de procédure :

Code: mssql

create or replace PACKAGE SAISIESURSITECTRLPKG
AS 
    TYPE ARRAY_INT is table of NUMBER index by binary_integer;
    TYPE T_CURSOR IS REF CURSOR; 
    PROCEDURE PERE_CURSOR (v_ele IN ARRAY_INT, v_bmb1 IN NUMBER, v_bmb2 IN NUMBER,  IO_CURSOR IN OUT T_CURSOR);
END SAISIESURSITECTRLPKG;

Code: mssql

CREATE OR REPLACE PACKAGE BODY SAISIESURSITECTRLPKG  
AS
    PROCEDURE PERE_CURSOR (v_ele IN ARRAY_INT, v_bmb1 IN NUMBER, v_bmb2 IN NUMBER,  IO_CURSOR IN OUT T_CURSOR)

    IS 
        V_CURSOR T_CURSOR; 
    BEGIN 
        OPEN V_CURSOR FOR 

                        SELECT Distinct    A.colonne1   
                        FROM                  Table1 A  
                        WHERE                A.colonne2 in v_ele  AND  
                                                  A.colonne3 between v_bmb1 and v_bmb2 ) ;           

        IO_CURSOR := V_CURSOR; 
    END PERE_CURSOR;    

END SAISIESURSITECTRLPKG;

Comment puis-je faire pour créer une procédure de ce type pour charger ma DW?
Précision : J'utilise Oracle 10G et PB 10.5

Merci.

Hors ligne

 

#2 17-02-2011 10:05:36

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: Datawindow chargée par une procédure stockée

Salut, c'est possible en utilisant RPCFUNC pour déclarer la procédure dans PB.


N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#3 17-02-2011 16:58:20

nico  
Modérateur
Award: bf
Lieu: Plélan le grand
Date d'inscription: 08-02-2007
Messages: 273
Pépites: 13
Banque: 9,223,372,036,854,776,000

Re: Datawindow chargée par une procédure stockée

Merci pour ton aide,

Je suis désolé de revenir sur le sujet mais je tourne en rond (et je ne maitrise pas du tout les PS).

De ce que j'ai cru comprendre, pour utiliser une PS Oracle dans une DW, il faut :

Créer une procédure retournant un curseur (et pas un record)
Ensuite créer une datawindow et choisir "Stored procedure" comme source de donnée.

Lorsque je crée une procédure toute simple avec un argument de type number en entrée :

Code: mssql

create or replace PACKAGE PS_PKG
AS 
    TYPE T_CURSOR IS REF CURSOR; 
    PROCEDURE PERE_CURSOR (v_ele IN NUMBER, IO_CURSOR IN OUT T_CURSOR);
END PS_PKG;

Code: mssql

CREATE OR REPLACE PACKAGE BODY PS_PKG
AS
    PROCEDURE PERE_CURSOR (v_ele IN NUMBER,  IO_CURSOR IN OUT T_CURSOR)

    IS 
        BEGIN 
        OPEN IO_CURSOR FOR 
              SELECT A.colonne1,A.colonne3,A.colonne4   
              FROM Table1 A  
              WHERE A.colonne2 = v_ele ;                    
    END PERE_CURSOR;    

END PS_PKG;


Ma DW est bien créée et je récupère mes données sans utiliser RPCFUNC pour déclarer la procédure dans PB.

Lorsque je veux créer la même PS avec l'argument v_ele de type number array, Oracle affiche des erreurs de compilations au niveau de la clause WHERE.
De plus, si je remplace mon select par un select n'utilisant pas ma variable ARRAY, ma PS compile, mais quand je crée une datawindow et choisir "Stored procedure" comme source de donnée, j'ai le message "Enable to optain sp parameters from database".

J'ai donc plusieurs questions :
1- Comment créer une PS oracle qui ferait une requête du type ci-dessous que je pourrais récupérer dans une DW?

Code: sql

SELECT A.colonne1, A.colonne3, A.colonne4  FROM Table1 A  WHERE A.colonne2 in :v_ele ;   


2- Doit-on forcément utiliser RPCFUNC pour déclarer la procédure dans PB?

3- La déclaration d'une PS se fait elle au niveau de mon objet Application? Dans Local External Functions?

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22