转义 '.'并在 PL/SQL 中使用变量

escaping '.' and using a variable in PL/SQL

在 PL/SQL 编码方面,我是初学者。我正在尝试使用 PL/SQL 做一些简单的管理工作。有人可以指出我做错了什么吗?

这是我的代码:

prompt Enter a value for the Schema that you just refreshed:
define owner=&1

BEGIN
    FOR x_rec IN (
        SELECT table_name FROM dba_tables WHERE owner='&&owner'
    )
    LOOP
        EXECUTE IMMEDIATE ''GRANT SELECT ON ' ||&&owner|| '.''||x_rec.table_name||'' to ' ||&&owner|| '_RO_ROLE'';
    END LOOP;
END;

一方面,你引用的太多了。 SQL*Plus 使用“.”来选择性地终止替换变量。如果你也想要一个实际的点,就用两个。

试试这个:

accept owner char prompt "Enter the name of the schema that you have just refreshed: "

begin
    for r in (
        select table_name from dba_tables where owner = upper('&&owner')
    )
    loop
       dbms_output.put_line('grant select on &&owner..' || r.table_name || ' to &&owner._ro_role');
       execute immediate 'grant select on &&owner..' || r.table_name || ' to &&owner._ro_role';
    end loop;
end;
/