如何刷新HANA中的所有虚拟表?

How to refresh all virtual tables in HANA?

我创建了一个带有游标的存储过程,用于遍历系统中的每个虚拟 table。

CREATE OR REPLACE PROCEDURE "Basis.db::sp_basis_alter_vt_2"( )
   AS
   OBJECT_NAME nvarchar(500);
  
BEGIN
    DECLARE OBJECT_ELEMENT_NAME nvarchar(500);
    DECLARE CURSOR v_Cursor
       FOR SELECT CONCAT(OBJECT_NAME, '"') AS OBJECT_NAME FROM(   
            SELECT CONCAT(OBJECT_NAME, TABLE_NAME) AS OBJECT_NAME FROM(
                    SELECT CONCAT(OBJECT_NAME, '"."') AS OBJECT_NAME, TABLE_NAME FROM (
                        SELECT CONCAT('"', SCHEMA_NAME) AS OBJECT_NAME, TABLE_NAME FROM "PUBLIC"."TABLES" WHERE TABLE_NAME LIKE 'VT_%')));
    OPEN v_Cursor;
    FETCH v_Cursor into OBJECT_ELEMENT_NAME;
    FOR cur_row AS v_CURSOR DO
        ALTER VIRTUAL TABLE cur_row.OBJECT_NAME REFRESH DEFINITION;
    END FOR;
    CLOSE v_Cursor;
END;

目前的问题是,cur_row.OBJECT_NAME 未被识别为 table 条目,而是模式名称。

如何刷新 HANA Cloud 中的所有虚拟表?

错误输出为:

Could not execute 'CREATE OR REPLACE PROCEDURE "Basis.db::sp_basis_alter_vt_2"( ) AS OBJECT_NAME ...'
Error: (dberror) [257]: sql syntax error: incorrect syntax near "REFRESH": line 15 col 42 (at pos 640)

这个解决方案似乎对我有用。 谢谢 Lars,感谢您的修改!

CREATE OR REPLACE PROCEDURE "Basis.db::sp_basis_alter_vt_2"( )
   AS
   OBJECT_NAME nvarchar(517);
  
BEGIN
    DECLARE CURSOR virt_tables FOR 
        SELECT 
              '"' || SCHEMA_NAME || '"."' || TABLE_NAME || '"' AS OBJECT_NAME
        FROM 
              "PUBLIC"."TABLES" 
        WHERE 
              TABLE_NAME LIKE 'VT_%';
    
    FOR vtab AS virt_tables DO
        EXECUTE IMMEDIATE 'ALTER VIRTUAL TABLE ' || vtab.OBJECT_NAME || ' REFRESH DEFINITION';
    END FOR;
    
END;