在Oracle中,是否有其他方法可以替代游标来提高性能?
下面的查询截断了特定模式中的特定表。有没有更好的选项可以在没有光标的情况下执行此操作?由于模式很大,执行此查询需要几分钟时间在Oracle中,是否有其他方法可以替代游标来提高性能?,oracle,oracle11g,oracle12c,Oracle,Oracle11g,Oracle12c,下面的查询截断了特定模式中的特定表。有没有更好的选项可以在没有光标的情况下执行此操作?由于模式很大,执行此查询需要几分钟时间 DECLARE TYPE cur_typ IS REF CURSOR; c cur_typ; qry_str VARCHAR2(1000); table_name VARCHAR2(50); BEGIN qry_str := \'SELECT TABLE_NAME FROM USER_ALL_TABLES WHERE (TAB
DECLARE TYPE cur_typ IS REF CURSOR;
c cur_typ;
qry_str VARCHAR2(1000);
table_name VARCHAR2(50);
BEGIN
qry_str := \'SELECT TABLE_NAME FROM USER_ALL_TABLES
WHERE (TABLE_NAME like \'\'STG_%\'\'
OR TABLE_NAME like \'\'S_%\'\' )\';
OPEN c FOR qry_str;
LOOP
FETCH c INTO table_name;
EXIT WHEN c%NOTFOUND;
EXECUTE IMMEDIATE \'TRUNCATE TABLE \' || table_name;
END LOOP;
CLOSE c;
你们有没有更快的选择?
谢谢您的帮助。您可以使用FORALL。
您还可以将要截断的表存储在单独的表中,而不查询字典表。您可以使用FORALL。
您还可以将要截断的表存储在单独的表中,而不查询字典表。您可以使用FORALL。
您还可以将要截断的表存储在单独的表中,而不查询字典表。您可以使用FORALL。
您还可以将要截断的表存储在单独的表中,而不查询字典表。您尝试过内联游标吗
BEGIN
FOR row in (
SELECT TABLE_NAME FROM USER_ALL_TABLES
WHERE TABLE_NAME like 'STG_%'
OR TABLE_NAME like 'S_%'
) LOOP
EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || row.table_name;
END LOOP;
END;
这并没有去除光标,只是将其隐藏在封面下,但更具可读性。如果您发现性能问题,请尝试调整查询。您尝试过内嵌游标吗
BEGIN
FOR row in (
SELECT TABLE_NAME FROM USER_ALL_TABLES
WHERE TABLE_NAME like 'STG_%'
OR TABLE_NAME like 'S_%'
) LOOP
EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || row.table_name;
END LOOP;
END;
这并没有去除光标,只是将其隐藏在封面下,但更具可读性。如果您发现性能问题,请尝试调整查询。您尝试过内嵌游标吗
BEGIN
FOR row in (
SELECT TABLE_NAME FROM USER_ALL_TABLES
WHERE TABLE_NAME like 'STG_%'
OR TABLE_NAME like 'S_%'
) LOOP
EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || row.table_name;
END LOOP;
END;
这并没有去除光标,只是将其隐藏在封面下,但更具可读性。如果您发现性能问题,请尝试调整查询。您尝试过内嵌游标吗
BEGIN
FOR row in (
SELECT TABLE_NAME FROM USER_ALL_TABLES
WHERE TABLE_NAME like 'STG_%'
OR TABLE_NAME like 'S_%'
) LOOP
EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || row.table_name;
END LOOP;
END;
这并没有去除光标,只是将其隐藏在封面下,但更具可读性。如果您发现性能问题,请尝试调整查询。如果有多个表,则TRUNCATE是比查询更大的问题。这是DDL,相当繁重的语句。如果表的数量超过了几个,那么TRUNCATE比查询更重要。这是DDL,相当繁重的语句。如果表的数量超过了几个,那么TRUNCATE比查询更重要。这是DDL,相当繁重的语句。如果表的数量超过了几个,那么TRUNCATE比查询更重要。这是DDL,相当繁重的语句。删除模式并重新创建?现在需要动态select语句。转到staic onedrop模式并重新创建?现在需要动态select语句。转到staic onedrop模式并重新创建?现在需要动态select语句。转到staic onedrop模式并重新创建?现在需要动态select语句。使用这种类型的游标进行staic one+1更简单、更快(因为自动批量收集),但我感觉这个过程的
SELECT
部分并不是瓶颈。如果这真的是整个查询,那么花费超过一秒钟的时间是不寻常的。+1使用这种类型的游标更简单、更快(因为自动批量收集),但我感觉这个过程的SELECT
部分并不是瓶颈。如果这真的是整个查询,那么花费超过一秒钟的时间是不寻常的。+1使用这种类型的游标更简单、更快(因为自动批量收集),但我感觉这个过程的SELECT
部分并不是瓶颈。如果这真的是整个查询,那么花费超过一秒钟的时间是不寻常的。+1使用这种类型的游标更简单、更快(因为自动批量收集),但我感觉这个过程的SELECT
部分并不是瓶颈。如果这真的是整个查询,那么花费超过一秒钟的时间是不寻常的。