Catégories :

Fonctions de table (Modélisation d’objet)

GET_OBJECT_REFERENCES

Renvoie une liste de tous les objets référencés par un objet spécifié. L’entrée est actuellement limitée au nom d’une vue.

Le tableau suivant identifie les types d’objets de bases de données actuellement renvoyés dans la sortie :

Type d’objet

Renvoyé en sortie ?

Tables

Oui

Vues (y compris les vues sécurisées)

Oui

Vues matérialisées

Non

Zones de préparation nommées (internes ou externes)

Non

Flux

Non

Fonctions définies par l’utilisateur (UDF)/Fonctions de table définies par l’utilisateur (UDTF)

Non

Syntaxe

GET_OBJECT_REFERENCES(
  DATABASE_NAME => '<string>'
  , SCHEMA_NAME => '<string>'
  , OBJECT_NAME => '<string>' )
Copy

Arguments

DATABASE_NAME => 'string'

Nom de la base de données dans laquelle résident le schéma et l’objet.

SCHEMA_NAME => 'string'

Nom du schéma dans lequel réside l’objet.

OBJECT_NAME => 'string'

Nom de l’objet. Actuellement limité au nom d’une vue (sécurisée ou non sécurisée).

Renvoie

La fonction renvoie les colonnes suivantes :

Nom de la colonne

Type de données

Description

DATABASE_NAME

TEXT

Nom de la base de données contenant l’objet interrogé.

SCHEMA_NAME

TEXT

Nom du schéma contenant l’objet interrogé.

OBJECT_NAME

TEXT

Nom de l’objet interrogé.

REFERENCED_DATABASE_NAME

TEXT

Nom de la base de données contenant un objet référencé par l’objet interrogé.

REFERENCED_SCHEMA_NAME

TEXT

Nom de la base de données contenant un objet référencé par l’objet interrogé.

REFERENCED_OBJECT_NAME

TEXT

Nom d’un objet référencé par l’objet interrogé.

REFERENCED_OBJECT_TYPE

TEXT

Type d’objet identifié dans la colonne REFERENCED_OBJECT_NAME. Les valeurs incluent TABLE ou VIEW.

Notes sur l’utilisation

  • Cette fonction requiert les privilèges suivants :

    • SELECT sur la vue. Pour obtenir des références pour une vue, le rôle utilisé ou un rôle accordé au rôle utilisé doit avoir le privilège SELECT sur la vue. Pour plus de détails, reportez-vous à Privilèges de table et Affichage des privilèges.

    • OWNERSHIP sur la vue sécurisée. Si la chaîne de dépendances fait référence à une vue sécurisée, le rôle utilisé ou un rôle accordé au rôle utilisé doit avoir le privilège OWNERSHIP sur la vue sécurisée. Sinon, Snowflake renvoie le message d’erreur suivant :

      Insufficient privileges to operate on view '<view_name>'
      
      Copy
  • Les valeurs DATABASE_NAME, SCHEMA_NAME et OBJECT_NAME doivent être placées entre guillemets. De plus, si l’un de ces noms contient des espaces, des caractères en majuscules et minuscules ou des caractères spéciaux, le nom doit être entre guillemets doubles à l’intérieur des guillemets simples (p. ex. '"My DB"' vs 'mydb').

  • Si la vue fait référence à des zones de préparation, des UDFs ou à des vues matérialisées, cette fonction renvoie une erreur plutôt que de renvoyer une liste des tables et des vues référencées.

Exemples

Renvoie la liste des références pour une vue :

-- create a database
create or replace database ex1_gor_x;
use database ex1_gor_x;
use schema PUBLIC;

-- create a set of tables
create or replace table x_tab_a (mycol int not null);
create or replace table x_tab_b (mycol int not null);
create or replace table x_tab_c (mycol int not null);

-- create views with increasing complexity of references
create or replace view x_view_d as
select * from x_tab_a
join x_tab_b
using ( mycol );

create or replace view x_view_e as
select x_tab_b.* from x_tab_b, x_tab_c
where x_tab_b.mycol=x_tab_c.mycol;

--create a second database
create or replace database ex1_gor_y;
use database ex1_gor_y;
use schema PUBLIC;

-- create a table in the second database
create or replace table y_tab_a (mycol int not null);

-- create more views with increasing levels of references
create or replace view y_view_b as
select * from ex1_gor_x.public.x_tab_a
join y_tab_a
using ( mycol );

create or replace view y_view_c as
select b.* from ex1_gor_x.public.x_tab_b b, ex1_gor_x.public.x_tab_c c
where b.mycol=c.mycol;

create or replace view y_view_d as
select * from ex1_gor_x.public.x_view_e;

create or replace view y_view_e as
select e.* from ex1_gor_x.public.x_view_e e, y_tab_a
where e.mycol=y_tab_a.mycol;

create or replace view y_view_f as
select e.* from ex1_gor_x.public.x_view_e e, ex1_gor_x.public.x_tab_c c, y_tab_a
where e.mycol=y_tab_a.mycol
and e.mycol=c.mycol;

-- retrieve the references for the last view created
select * from table(get_object_references(database_name=>'ex1_gor_y', schema_name=>'public', object_name=>'y_view_f'));

+---------------+-------------+-----------+--------------------------+------------------------+------------------------+------------------------+
| DATABASE_NAME | SCHEMA_NAME | VIEW_NAME | REFERENCED_DATABASE_NAME | REFERENCED_SCHEMA_NAME | REFERENCED_OBJECT_NAME | REFERENCED_OBJECT_TYPE |
|---------------+-------------+-----------+--------------------------+------------------------+------------------------+------------------------|
| EX1_GOR_Y     | PUBLIC      | Y_VIEW_F  | EX1_GOR_Y                | PUBLIC                 | Y_TAB_A                | TABLE                  |
| EX1_GOR_Y     | PUBLIC      | Y_VIEW_F  | EX1_GOR_X                | PUBLIC                 | X_TAB_B                | TABLE                  |
| EX1_GOR_Y     | PUBLIC      | Y_VIEW_F  | EX1_GOR_X                | PUBLIC                 | X_TAB_C                | TABLE                  |
| EX1_GOR_Y     | PUBLIC      | Y_VIEW_F  | EX1_GOR_X                | PUBLIC                 | X_VIEW_E               | VIEW                   |
+---------------+-------------+-----------+--------------------------+------------------------+------------------------+------------------------+
Copy