转义 '.'并在 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;
/
在 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;
/