Mohu nějak získat hodnoty z dotazu id uložené procedury v současné době volal, že uvnitř uložené procedury, sám v sněhová Vločka

0

Otázka

Říct, že jsem volat uloženou proceduru, jako je tento:

call SP_TEST('CAT','LION');

Nyní po úspěšné spuštění jsem ten dotaz id pomocí příkazu:

select last_query_id();

To vrátí dotaz id jako 01a07606-0b02-362d-0001-1d6602361072

Řekněme, že si chci tento dotaz id, které mají být zapsány do proměnné během runtime, jako například :

create or replace procedure test_proc111
("SRC" VARCHAR(30),  "TGT" VARCHAR(30))
returns varchar
language javascript
execute as owner
as '
{
var TABLE_VALUE = "";

    var code1 = "select last_query_id();"
    var code1_excecute = snowflake.execute({sqlText: code1});

    while(code1_excecute.next()) {
        var TABLE_VALUE = code1_excecute.getColumnValue(1); 
    }

    return TABLE_VALUE
}
';

Teď jsem volat uložené procedury, jako je tento:

call test_proc1111('TEST','TARGET')

Ale já se tuto chybu:

Provedení chybě v uložené proceduře TEST_PROC1111: Prohlášení NULL nebyl nalezen V sněhová Vločka. provést, linka 8 pozici 31

Jak můžeme dosáhnout tento případ použití?

snowflake-cloud-data-platform sql
2021-11-23 06:18:58
1

Nejlepší odpověď

1

V uložené proceduře v otázce, budete jen dostat dotazu id, pokud je proveden jako volajícího:

create or replace procedure test_proc111
("SRC" VARCHAR(30),  "TGT" VARCHAR(30))
returns varchar
language javascript
execute as caller
as '

var TABLE_VALUE;

var code1 = "select last_query_id(-1);"
var code1_excecute = snowflake.execute({sqlText: code1});
while(code1_excecute.next()){
    TABLE_VALUE =  code1_excecute.getColumnValue(1); 
}
return TABLE_VALUE
'
;

To proto, že pokud je definována v execute as ownerto bude mít pouze předchozí dotaz id, pokud tam je další dotaz proveden v rámci postupu:

create or replace procedure test_proc111
("SRC" VARCHAR(30),  "TGT" VARCHAR(30))
returns varchar
language javascript
execute as owner
as '

var TABLE_VALUE;

var code1 = "select last_query_id(-1);"
var code1_excecute = snowflake.execute({sqlText: code1});

var code1 = "select last_query_id(-1);"
var code1_excecute = snowflake.execute({sqlText: code1});
while(code1_excecute.next()){
    TABLE_VALUE =  code1_excecute.getColumnValue(1); 
}
return TABLE_VALUE
'
;
2021-11-23 07:07:19

Tohle funguje, díky. Ale můžete mi dát více informací proč provádět jako majitel nezdaří k dosažení této funkce, co jsme mohli přinést volající?
rita mishra

Felipe Hoffa

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................