begin
for x in (select table_name from user_tables) loop
execute immediate 'grant select on ' || x.table_name || ' to U_NAME' ;
end loop;
end;
#2
DECLARE
v_sql varchar2(2000);
begin
select 'grant select on '||owner||'.'||table_name||' to LEE;' into v_sql
from dba_tables where tablespace_name='EXAMPLE';
execute immediate v_sql;
end;
#3
DECLARE
CURSOR CUR_MYCUR IS
SELECT * FROM USER_TABLES;
V_NAME USER_TABLES.TABLENAME%TYPE;
V_SQLSTMT VARCHAR2(300);
V_OWNER VARCHAR2(50) := 'ORACLE';
BEGIN
V_SQLSTMT := 'GRANT SELECT ON :OWNER.:TABLE_NAME TO LEE';
FOR CUR_ITERATOR IN CUR_MYCUR LOOP
EXECUTE IMMEDIATE V_SQLSTMT
USING V_OWNER, CUR_ITERATOR.TABLE_NAME;
END LOOP;
END;
#4
跟上面几楼学习了
#5
动态SQL
#6
1、首先,普通用户是没有给别的用户赋权限的权限,只有超级用户admin或者管理员帐号才可以给别的用户赋予权限。
2、赋予权限SQL语句(给普通用户user赋所有权限):
grant all to user;
如果只要赋予部分权限,则:
grant create session, select any table, dba to user;
#7
我是想把一个表空间下的所有表查询权限都赋值给某个用户,所以有两个参数:
select owner,table_name from dba_tables where tablespace_name='EXAMPLE';,
for x in 只是传了一个参数,如果我要传两个参数要怎么传呢?
#8
执行报错,实际返回的行数超出请求的行数
#9
拼接一下就可以了
begin
for x in (select owner,table_name from dba_tables where tablespace_name='EXAMPLE') loop
execute immediate 'grant select on ' || x.owner || '.' || x.table_name || ' to U_NAME' ;
end loop;
end;
#10
因为给参数赋值,into v_sql 。只能是查询一行出来,不能多行,否则就报错。
#11
我是想把一个表空间下的所有表查询权限都赋值给某个用户,所以有两个参数:
select owner,table_name from dba_tables where tablespace_name='EXAMPLE';,
for x in 只是传了一个参数,如果我要传两个参数要怎么传呢?
拼接一下就可以了
begin
for x in (select owner,table_name from dba_tables where tablespace_name='EXAMPLE') loop
execute immediate 'grant select on ' || x.owner || '.' || x.table_name || ' to U_NAME' ;
end loop;
end;
谢谢,你的方法简明正确。但是这样子做,报错了:无法引用索引表的溢出表,后面的就不执行了。后来,我把筛选条件改成:
select owner,table_name from dba_tables where tablespace_name='EXAMPLE' and table_name not like '%74%'
。就没有再报错了。所以,我想再请教一下,索引表的溢出表,是什么意思,百度了一下都是介绍索引表的。然后,如果要让代码报错了,还是能继续执行下去,要怎么改呢?
#12
begin
for x in (select owner,table_name from dba_tables where tablespace_name='EXAMPLE') loop
begin
execute immediate 'grant select on ' || x.owner || '.' || x.table_name || ' to U_NAME' ;
exception
when others then null;
end;
end loop;
end;
#13
mark 一下
#1
begin
for x in (select table_name from user_tables) loop
execute immediate 'grant select on ' || x.table_name || ' to U_NAME' ;
end loop;
end;
#2
DECLARE
v_sql varchar2(2000);
begin
select 'grant select on '||owner||'.'||table_name||' to LEE;' into v_sql
from dba_tables where tablespace_name='EXAMPLE';
execute immediate v_sql;
end;
#3
DECLARE
CURSOR CUR_MYCUR IS
SELECT * FROM USER_TABLES;
V_NAME USER_TABLES.TABLENAME%TYPE;
V_SQLSTMT VARCHAR2(300);
V_OWNER VARCHAR2(50) := 'ORACLE';
BEGIN
V_SQLSTMT := 'GRANT SELECT ON :OWNER.:TABLE_NAME TO LEE';
FOR CUR_ITERATOR IN CUR_MYCUR LOOP
EXECUTE IMMEDIATE V_SQLSTMT
USING V_OWNER, CUR_ITERATOR.TABLE_NAME;
END LOOP;
END;
#4
跟上面几楼学习了
#5
动态SQL
#6
1、首先,普通用户是没有给别的用户赋权限的权限,只有超级用户admin或者管理员帐号才可以给别的用户赋予权限。
2、赋予权限SQL语句(给普通用户user赋所有权限):
grant all to user;
如果只要赋予部分权限,则:
grant create session, select any table, dba to user;
#7
begin
for x in (select table_name from user_tables) loop
execute immediate 'grant select on ' || x.table_name || ' to U_NAME' ;
end loop;
end;
我是想把一个表空间下的所有表查询权限都赋值给某个用户,所以有两个参数:
select owner,table_name from dba_tables where tablespace_name='EXAMPLE';,
for x in 只是传了一个参数,如果我要传两个参数要怎么传呢?
#8
DECLARE
v_sql varchar2(2000);
begin
select 'grant select on '||owner||'.'||table_name||' to LEE;' into v_sql
from dba_tables where tablespace_name='EXAMPLE';
execute immediate v_sql;
end;
执行报错,实际返回的行数超出请求的行数
#9
我是想把一个表空间下的所有表查询权限都赋值给某个用户,所以有两个参数:
select owner,table_name from dba_tables where tablespace_name='EXAMPLE';,
for x in 只是传了一个参数,如果我要传两个参数要怎么传呢?
拼接一下就可以了
begin
for x in (select owner,table_name from dba_tables where tablespace_name='EXAMPLE') loop
execute immediate 'grant select on ' || x.owner || '.' || x.table_name || ' to U_NAME' ;
end loop;
end;
#10
DECLARE
v_sql varchar2(2000);
begin
select 'grant select on '||owner||'.'||table_name||' to LEE;' into v_sql
from dba_tables where tablespace_name='EXAMPLE';
execute immediate v_sql;
end;
执行报错,实际返回的行数超出请求的行数
因为给参数赋值,into v_sql 。只能是查询一行出来,不能多行,否则就报错。
#11
我是想把一个表空间下的所有表查询权限都赋值给某个用户,所以有两个参数:
select owner,table_name from dba_tables where tablespace_name='EXAMPLE';,
for x in 只是传了一个参数,如果我要传两个参数要怎么传呢?
拼接一下就可以了
begin
for x in (select owner,table_name from dba_tables where tablespace_name='EXAMPLE') loop
execute immediate 'grant select on ' || x.owner || '.' || x.table_name || ' to U_NAME' ;
end loop;
end;
谢谢,你的方法简明正确。但是这样子做,报错了:无法引用索引表的溢出表,后面的就不执行了。后来,我把筛选条件改成:
select owner,table_name from dba_tables where tablespace_name='EXAMPLE' and table_name not like '%74%'
。就没有再报错了。所以,我想再请教一下,索引表的溢出表,是什么意思,百度了一下都是介绍索引表的。然后,如果要让代码报错了,还是能继续执行下去,要怎么改呢?
#12
begin
for x in (select owner,table_name from dba_tables where tablespace_name='EXAMPLE') loop
begin
execute immediate 'grant select on ' || x.owner || '.' || x.table_name || ' to U_NAME' ;
exception
when others then null;
end;
end loop;
end;