Oracle 执行立即语句的参数(在过程中)

Oracle 执行立即语句的参数(在过程中),oracle,oracle11g,createuser,execute-immediate,Oracle,Oracle11g,Createuser,Execute Immediate,我要在一个过程中从我的用户表中创建一个ORACLE用户。问题是我不知道如何调用特定列。我试过使用Camp.user.username之类的东西 create or replace PROCEDURE PR_USERPASS AS BEGIN UPDATE CAMP.USERS SET USERNAME = (DBMS_RANDOM.string('x',15)), PASS = DBMS_RANDOM.string('x',12); EXECUTE IMMEDIATE 'CREA

我要在一个过程中从我的用户表中创建一个ORACLE用户。问题是我不知道如何调用特定列。我试过使用Camp.user.username之类的东西

create or replace 
PROCEDURE PR_USERPASS AS
 BEGIN
  UPDATE CAMP.USERS
  SET USERNAME = (DBMS_RANDOM.string('x',15)), PASS = DBMS_RANDOM.string('x',12);
  EXECUTE IMMEDIATE 'CREATE USER ' || USERNAME || ' IDENTIFIED BY ' || PASSWORD;
  EXECUTE IMMEDIATE 'Grant connect to ' || USERNAME;
 END PR_USERPASS;
在同一过程中是否有调用该引用的方法? 提前感谢。

使用循环遍历
Camp.Users
表并访问其列。您的代码可能是这样的(未经测试):


附录:原始答案以
DBMS\u Random.String('x',15)
的形式生成
用户名
,允许用户名和密码使用数字和数字。当用户名以数字开头时,这会导致问题。答案更改为使用
DBMS\u Random.String('u',15)
仅生成Oracle可接受的用户名值。密码似乎与前导数字一致

如果需要以数字开头的用户名,只需将用户名用双引号括起来:

     EXECUTE IMMEDIATE 'CREATE USER "' || userRow.Username || '" IDENTIFIED BY ' || userRow.Pass;
     EXECUTE IMMEDIATE 'GRANT CONNECT TO "' || userRow.Username || '"';
也就是说,我不确定使用非标准用户名是否是个好主意

可以找到
DBMS\u Random.String
的文档。

使用循环遍历
Camp.Users
表并访问其列。您的代码可能是这样的(未经测试):


附录:原始答案以
DBMS\u Random.String('x',15)
的形式生成
用户名
,允许用户名和密码使用数字和数字。当用户名以数字开头时,这会导致问题。答案更改为使用
DBMS\u Random.String('u',15)
仅生成Oracle可接受的用户名值。密码似乎与前导数字一致

如果需要以数字开头的用户名,只需将用户名用双引号括起来:

     EXECUTE IMMEDIATE 'CREATE USER "' || userRow.Username || '" IDENTIFIED BY ' || userRow.Pass;
     EXECUTE IMMEDIATE 'GRANT CONNECT TO "' || userRow.Username || '"';
也就是说,我不确定使用非标准用户名是否是个好主意


可以找到
DBMS\u Random.String
的文档。

我尝试过使用userRow.USERNAME、userRow.PASS使用EXECUTE IMMEDIATE“创建由(:b)标识的用户(:a)”;还是不起作用。是不是ORA-01935的错误?在这种情况下,可能是因为
DBMS\u Random.String('x',length)
返回一个包含字母和数字的值,如果第一个字符是数字,则它不是用户名或密码的有效名称。是否希望用户名或密码以数字开头?两种方式都可以;只要让我知道,我会发布更新。你是对的!我在DBMS_RANDOM中将“x”改为“u”,现在它开始工作了。不管怎样,你知道如何使用以数字开头的密码吗?谢谢大家!我只是在这里尝试了一下,Oracle允许我创建一个密码为123456的用户,所以当我说一个开头有数字的密码无效时,我错了。您应该能够使用
DBMS\u Random.String('x',12)
获取密码。也就是说,如果遇到任何问题,只需在密码周围加上双引号:
。。。由“'| | userRow.Pass |'”标识。使用双引号,您可以忽略任何值。还请注意,双引号除了允许您使用非标准字符(包括标点符号和空格)外,还将使值区分大小写。很多人(包括我)在这方面遇到了麻烦:)我曾经尝试过使用userRow.USERNAME、userRow.PASS使用executeimmediate“创建由(:b)标识的用户(:A)”;还是不起作用。是不是ORA-01935的错误?在这种情况下,可能是因为
DBMS\u Random.String('x',length)
返回一个包含字母和数字的值,如果第一个字符是数字,则它不是用户名或密码的有效名称。是否希望用户名或密码以数字开头?两种方式都可以;只要让我知道,我会发布更新。你是对的!我在DBMS_RANDOM中将“x”改为“u”,现在它开始工作了。不管怎样,你知道如何使用以数字开头的密码吗?谢谢大家!我只是在这里尝试了一下,Oracle允许我创建一个密码为123456的用户,所以当我说一个开头有数字的密码无效时,我错了。您应该能够使用
DBMS\u Random.String('x',12)
获取密码。也就是说,如果遇到任何问题,只需在密码周围加上双引号:
。。。由“'| | userRow.Pass |'”标识。使用双引号,您可以忽略任何值。还请注意,双引号除了允许您使用非标准字符(包括标点符号和空格)外,还将使值区分大小写。很多人(包括我)都会因此而遇到麻烦:)