在 Oracle pl/sql 中使用插入语句创建过程
Create procedure with a insert statement in Oracle pl/sql
我正在尝试使用此插入语句创建过程,否则它工作正常但是当尝试将此插入查询合并到过程中时它给我以下错误
Error(11,1): PL/SQL: SQL Statement ignored and
Error(16,17): PL/SQL: ORA-00904: "DBMS_RANDOM"."VALUE": invalid identifier
我需要 运行 这个 proc 10 个月,以便在一个循环中复制数据 10 个月,但我卡在了第一步,proc 没有被编译。
{
create or replace PROCEDURE datareplicationProcedure
(Start_date IN Date, End_date IN Date) AS
BEGIN
`insert statement`
insert into SAM_CDS.transactions
(TENANT_CD,TRANSACTION_KEY, BATCH_ID ,ACCT_CURR_AMOUNT, BATCH_DATE_TIME,DAY_SK,WEEK_SK, MONTH_SK )
(
Select A.TENANT_CD, A.TRANSACTION_KEY,A.BATCH_ID,A.acct_curr_amount,A.BATCH_DATE_TIME,D.DAY_SK,D.WEEK_SK, D.MONTH_SK
from (
( select TENANT_CD,'TRANSACTION_'||(DBMS_RANDOM.string('x',10))as TRANSACTION_KEY,BATCH_ID,acct_curr_amount ,
TO_DATE( TRUNC( DBMS_RANDOM.VALUE(TO_CHAR(DATE '2021-07-01','J'),TO_CHAR(DATE '2021-07-31','J'))),'J') BATCH_DATE_TIME
from SAM_CDS.transactions where batch_date_time
between to_date('04-FEB-19') and to_Date('05-FEB-19')
)A
left outer join
(select * from SAM_CDS.DAY where DATETIME between Start_date and End_date)D
on D.DATETIME=A.BATCH_DATE_TIME )
);
END datareplicationProcedure;
}
程序的所有者似乎没有通过直接授权访问 dbms_random
程序包。如果 insert
语句在存储过程之外编译,则授权很可能是通过角色而不是直接授权。定义者权限存储过程不能使用通过角色授予的特权,只能使用直接授予用户的那些特权。您可以将该过程更改为调用者权限存储过程,它可以使用通过角色授予的权限,但这将要求该角色在调用该过程的每个会话中都对调用者可用。更有可能的是,您希望 DBA 直接向过程所有者授予对 dbms_random
的访问权限。
我正在尝试使用此插入语句创建过程,否则它工作正常但是当尝试将此插入查询合并到过程中时它给我以下错误
Error(11,1): PL/SQL: SQL Statement ignored and
Error(16,17): PL/SQL: ORA-00904: "DBMS_RANDOM"."VALUE": invalid identifier
我需要 运行 这个 proc 10 个月,以便在一个循环中复制数据 10 个月,但我卡在了第一步,proc 没有被编译。
{
create or replace PROCEDURE datareplicationProcedure
(Start_date IN Date, End_date IN Date) AS
BEGIN
`insert statement`
insert into SAM_CDS.transactions
(TENANT_CD,TRANSACTION_KEY, BATCH_ID ,ACCT_CURR_AMOUNT, BATCH_DATE_TIME,DAY_SK,WEEK_SK, MONTH_SK )
(
Select A.TENANT_CD, A.TRANSACTION_KEY,A.BATCH_ID,A.acct_curr_amount,A.BATCH_DATE_TIME,D.DAY_SK,D.WEEK_SK, D.MONTH_SK
from (
( select TENANT_CD,'TRANSACTION_'||(DBMS_RANDOM.string('x',10))as TRANSACTION_KEY,BATCH_ID,acct_curr_amount ,
TO_DATE( TRUNC( DBMS_RANDOM.VALUE(TO_CHAR(DATE '2021-07-01','J'),TO_CHAR(DATE '2021-07-31','J'))),'J') BATCH_DATE_TIME
from SAM_CDS.transactions where batch_date_time
between to_date('04-FEB-19') and to_Date('05-FEB-19')
)A
left outer join
(select * from SAM_CDS.DAY where DATETIME between Start_date and End_date)D
on D.DATETIME=A.BATCH_DATE_TIME )
);
END datareplicationProcedure;
}
程序的所有者似乎没有通过直接授权访问 dbms_random
程序包。如果 insert
语句在存储过程之外编译,则授权很可能是通过角色而不是直接授权。定义者权限存储过程不能使用通过角色授予的特权,只能使用直接授予用户的那些特权。您可以将该过程更改为调用者权限存储过程,它可以使用通过角色授予的权限,但这将要求该角色在调用该过程的每个会话中都对调用者可用。更有可能的是,您希望 DBA 直接向过程所有者授予对 dbms_random
的访问权限。