J'ai vu des discussions à ce sujet dans le passé, telle que ici . Mais je me demande si quelque part le long de la ligne, peut-être 10g ou 11g (nous utilisons 11g), Oracle a introduit un meilleur support pour "Vues paramétrées", sans avoir besoin de litière la base de données avec toutes sortes de types définis par l'utilisateur et / ou des définitions de curseur ou des variables SYS_Context de partout.
J'espère que l'appui supplémentaire d'Oracle pour quelque chose qui «fonctionne simplement», selon l'exemple suivant dans T-SQL: P>
SELECT * FROM dbo.getSomeData(23)
3 Réponses :
Pas besoin de définitions SYS_Context ou Cursor. Vous avez besoin d'un type de sorte que, lorsque le SQL est analysé, il peut déterminer quelles colonnes seront retournées. Cela dit, vous pouvez facilement écrire un script qui générera des définitions de type et de type de collecte pour une ou plusieurs tables en fonction des données de l'utilisateur_tab_columns.
Le plus proche est p>
create table my_table (prodid number, a varchar2(1), b varchar2(1), c varchar2(1), d varchar2(1), e varchar2(1)); create type my_tab_type is object (prodid number, a varchar2(1), b varchar2(1), c varchar2(1), d varchar2(1), e varchar2(1)) . / create type my_tab_type_coll is table of my_tab_type; / create or replace function get_some_data (p_val in number) return my_tab_type_coll pipelined is begin FOR i in (select * from my_table where prodid=p_val) loop pipe row(my_tab_type(i.prodid,i.a,i.b,i.c,i.d,i.e)); end loop; return; end; / SELECT * FROM table(get_Some_Data(3));
Belle réponse (errance "." Dans my_tab_type créer). Vaut la peine de dire que cela fonctionne dans 10g.
Ne répond pas à la "Sans avoir besoin de litière la base de données avec toutes sortes de types de types définis par l'utilisateur".
Il existe deux types de fonctions valorisées de table dans SQL Server: P>
Fonction de valorisation de table en ligne: Pour une fonction de valorisation de la table en ligne, il n'y a pas de corps de fonction; La table est l'ensemble de résultats d'une seule instruction code> code>. Ce type peut être nommé comme «Vue paramétrée» et il n'a pas d'équivalent à Oracle tel que je sais. p> li>
Fonction de valorisation de la table à multiplier la table: pour une fonction de valorisation de la table multi-étage, le corps de la fonction, défini dans un L'échantillon ci-dessus (par Gary Myers) crée une fonction de table du deuxième type et ce n'est pas une "vue paramétrée". p> Begn ... fin code> bloc, contient une série de déclarations de transaction-SQL qui Construisez et insérez des rangées dans la table qui sera renvoyée. P> li>
ol>
La question concerne Oracle
Il est possible de définir une sorte de vues "paramétrées" dans Oracle. Les étapes sont: p>
Pour utiliser ce mécanisme, un utilisateur doit: P>
Sélectionnez CODE> DONNÉES DE LA VUE, LI>
- Faites d'autres choses ou fermez la session. LI>
ol>
remarque em>: il est essentiel que l'utilisateur fasse toutes les trois étapes de la seule session car la portée des membres du paquet est exactement une session. P>
J'ai espéré la même chose ...