我正在尝试收集一系列修订版数字.
我将用于删除多个审计表中的记录.
所以我编写了一个plsql来收集该数组,并根据使用该数组的条件在其他表上运行delete
declare
type NumberArray is table of number index by binary_integer;
revisions NumberArray;
Begin
select rev bulk collect into revisions from (
select t.rev, row_number() over (partition by
column1,
column2
order by column3) rn
from table1 t)
where rn <> 1;
dbms_output.put_line(revisions.count || ' records found from table2 to be deleted');
delete from table2 where rev in (revisions);
dbms_output.put_line('deleted from table2');
Run Code Online (Sandbox Code Playgroud)
我正进入(状态
PLS-00382: expression is of wrong type
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a …Run Code Online (Sandbox Code Playgroud) 我从查询得到以下结果,我是一个plsql块,我在其中循环记录和send_email给客户.

匿名阻止
FOR i IN (SELECT product_no, product_holder,product_catalogue FROM
product_master)
LOOP
mail_send('PRODMASTER',i.product_holder, i.product_no,i.product_catalogue);
END LOOP;
Run Code Online (Sandbox Code Playgroud)
我想知道什么是最好的方法,如果product_holder在查询结果中重复,而不是发送多封电子邮件,想发送一封包含相关细节的电子邮件.例如,在上述情况下SMITH重复两次,所以用上面的方法将史密斯拿到两封电子邮件,而不是我想发一封电子邮件SMITH与product_no和product_catalogue
我怎样才能做到这一点?
我有一个要求,我需要搜索所有记录,如'00456159 /%'.在数据库中有两个记录00456159/A和00456159/I. 但是在下面我正在使用它的代码中没有给出任何记录.有人指出我正在做的错误吗?谢谢,
SET SERVEROUTPUT ON;
DECLARE
Cursor c2(v_comp IN VARCHAR2) is select distinct rate_agreement_nbr rag FROM APL_PRICING.rate_agreement
WHERE RATE_AGREEMENT_NBR like ''''||v_comp||'%'||'''';
v_comp1 VARCHAR2(15);
BEGIN
v_comp1 :=SUBSTR('00456159/A',1,9);
For v_rec in c2(v_comP1)
loop
DBMS_OUTPUT.PUT_LINE(v_rec.rag);
end loop;
END;
Run Code Online (Sandbox Code Playgroud) 我对使用软件包很陌生。我的团队正在决定是否在我们的应用程序中使用软件包。我们有4个应用程序当前正在使用嵌入式SQL。我们决定将每个sql语句放入存储过程中,然后在逻辑上将存储过程分组到包中(这些存储过程将在应用程序之间共享)。使用软件包的潜在利弊是什么?
我们的应用程序是使用c#在asp.net中编写的。
我有一个oracle数据库,想要一种简单的方法来生成crud的存储过程(Create,Retrieve,Update,Delete).我一直在网上搜索,但找不到合适的工具.
我有参数
:dateFrom
Run Code Online (Sandbox Code Playgroud)
它将在函数中用作TIMESTAMP的参数.我需要添加到:dateFrom + 7小时,我该怎么做?
我编写了一个存储过程,我希望将两个计数值添加到集合中,使用以下代码:
PROCEDURE generate(code_in in VARCHAR2
, value_1 out NUMBER
, value_2 out NUMBER) is
BEGIN
SELECT
COUNT(CASE WHEN type = 'A' THEN 1 ELSE NULL END) INTO value_1
, COUNT(CASE WHEN type IN ('B','D') THEN 1 ELSE NULL END) INTO value_2
FROM table
WHERE code = code_in;
END generate;
Run Code Online (Sandbox Code Playgroud)
但是在运行代码时出现以下错误:
ORA-00934:此处不允许使用组功能
如果我删除第二个COUNT存储过程编译得很好,但是当我添加第二行时,我得到错误.
任何人都可以帮助解释为什么会这样吗?请注意,我对Oracle的经验很少.
我需要开发一个PL/SQL过程,至少需要传递26个参数.PL/SQL过程可以拥有的最大参数数量是多少?拥有大量参数会带来什么后果?会不会给您带来不便?
我想在PL/Sql中生成正态分布 - Oracle.我知道我们可以通过dbms_random生成这种分布,但是我想指定正常函数的参数(间隔,平均值,标准偏差).
是否有一种简单的方法来生成此分布,还是应该编写自己的函数?
谢谢
以下存储过程用于获取参数my_seconds,创建日期变量my_date,即当前日期加上(或减去)数字my_seconds,并打印日期.
CREATE OR REPLACE PROCEDURE test (my_seconds NUMBER)
IS
my_date DATE;
BEGIN
execute immediate 'select sysdate + interval '':1'' second from dual' into my_date USING &my_seconds;
DBMS_OUTPUT.PUT_LINE('DATE:' || my_date);
END
Run Code Online (Sandbox Code Playgroud)
但是,当编译过程(使用Oracle SQL开发人员)时,它会提示输入my_seconds的值,并且无法正确创建过程.
该怎么做:
execute immediate 'select sysdate + interval '':1'' second from dual' into my_date USING &my_seconds ;
Run Code Online (Sandbox Code Playgroud)
被重写?
谢谢