问题描述
我创建了一个带有游标的存储过程,用于遍历系统中的每个虚拟表。
@client.command()
async def poll(ctx,*,message):
message = await ctx.send(message)
await message.add_reaction(u"\U0001F44D")
当前的问题是,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;
不能识别为表条目,而可以识别为架构名称。
如何刷新HANA Cloud中的所有虚拟表?
cur_row.OBJECT_NAME
解决方法
似乎这个解决方案对我来说可行。 谢谢拉斯,谢谢您的修改!
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;