簡體   English   中英

如何在存儲過程中運行 SHOW WAREHOUSES 命令?

[英]How do I run a SHOW WAREHOUSES command within a stored procedure?

我正在嘗試開發一個存儲過程,用戶可以運行它來更改他們的默認倉庫,它只有一個輸入變量:用戶也想要更改默認倉庫的倉庫。 我想在檢查用戶輸入的倉庫變量是否存在的地方添加驗證。

因此,我希望能夠在存儲過程中運行“SHOW WAREHOUSES LIKE:warehouse”查詢,並對此執行 SELECT COUNT (*) 以計算有多少倉庫與輸入變量:warehouse 類似,因此我可以驗證它存在與否。 我不知道如何做到這一點,所以有誰知道我可以做到這一點的方法,有一個代碼示例,所以我可以看到語法?

在步驟中,我想要做的是:(1)運行 SHOW WAREHOUSES LIKE 查詢,(2)計算有多少倉庫,如輸入變量:倉庫,(3)然后執行一個 IF 語句,如“IF warehouse_check =0 THEN RETURN '倉庫不存在'”。

到目前為止我所嘗試的(無論如何都不是 SQL 專家,仍在學習,所以語法可能非常糟糕)

    sql_command := 'SHOW WAREHOUSES LIKE '||:warehouse||';';
    EXECUTE IMMEDIATE :sql_command;
    
    warehouse_check := 'SELECT COUNT (*) FROM (RESULT_SCAN ( { LAST_QUERY_ID() } ))';
    EXECUTE IMMEDIATE :warehouse_check;
    
    IF (warehouse_check =0) THEN
        RETURN 'No warehouse with that name';
    END IF;

並且

    usage_check := 'SELECT (SHOW WAREHOUSES LIKE '||:warehouse||');';
    
    warehouse_check := (select count(*) from table(result_scan(last_query_id(-1))) where "name" = :warehouse);
    
    IF (warehouse_check = 0) THEN
        RETURN 'No warehouse with that name';
    END IF;

如果有人有任何想法,將不勝感激!

這一項為用戶設置了默認倉庫。 SP 應該由像 accountadmin 這樣的強大角色創建:

CREATE OR REPLACE PROCEDURE DEFAULT_WAREHOUSE( wname VARCHAR )
RETURNS VARCHAR
LANGUAGE SQL
EXECUTE AS OWNER
AS
DECLARE
   sql_command VARCHAR;
   set_warehouse VARCHAR;
   warehouse_check VARCHAR;
   res RESULTSET;
BEGIN
    sql_command := 'SHOW WAREHOUSES LIKE '''||:wname||''';';
    res := (EXECUTE IMMEDIATE :sql_command);
    let c1 cursor for res;    
    open c1;
    fetch c1 into warehouse_check;
    close c1;
    IF ( warehouse_check = UPPER(wname) ) THEN
        set_warehouse := 'ALTER USER ' || current_user() || ' SET DEFAULT_WAREHOUSE=' || warehouse_check;
        EXECUTE IMMEDIATE set_warehouse;
        RETURN 'Warehouse is set as default for user ' || current_user();
    END IF;
    RETURN 'No warehouse with that name';
END;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM