Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
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 :
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;
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
Salut, c'est possible en utilisant RPCFUNC pour déclarer la procédure dans PB.
Hors ligne
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 :
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;
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?
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