我正在使用Oracle 11g数据库,发布11.2.0.3.0 - 64位生产
我有几个已定义的包,过程,函数和数据类型.在使用集合,数组和其他数据结构进行大量中间计算之后,我最终需要动态创建数据库表以输出我的最终结果.出于这个问题的目的,我有以下内容:
TYPE ids_t IS TABLE OF NUMBER INDEX BY PLS_INTEGER;
benefit_ids ids_t;
--Lots of other code which successfully populates benefit_ids.
--benefit_ids has several million rows, and is used successfully as
the input to the following function:
FUNCTION find_max_ids(in_ids in ids_t)
RETURN ids_t
IS
str_sql varchar2(200);
return_ids ids_t;
BEGIN
str_sql := 'SELECT max(b.benefit_id)
FROM TABLE(:1) a
JOIN benefits b ON b.benefit_id = a.column_value
GROUP BY b.benefit_id';
EXECUTE IMMEDIATE str_sql BULK COLLECT INTO return_ids USING in_ids;
RETURN return_ids; …Run Code Online (Sandbox Code Playgroud) 我试图在插入表之前编写一个触发器.
它检查特定值,如果它无效,它将引发异常
CREATE OR REPLACE TRIGGER insert_birthdate
BEFORE INSERT ON student
DECLARE
invalid_date EXCEPTION ;
BEGIN
IF(NEW.birthdate >= sysdate - interval '16' year )
THEN RAISE invalid_date ;
END IF ;
EXCEPTION
WHEN invalid_date THEN
RAISE_APPLICATION_ERROR(-20500, 'AGE MUST BE GREATER THAN 16 !!');
END;
/
Run Code Online (Sandbox Code Playgroud)
这是行不通的.
这个输出,有什么帮助吗?
Warning: Trigger created with compilation errors.
SQL>
SQL> show errors
Errors for TRIGGER INSERT_BIRTHDATE:
LINE/COL ERROR
-------- ----------------------------------------------------------
4/2 PL/SQL: Statement ignored
4/8 PLS-00201: identifier 'NEW.BIRTHDATE' must be declared
SQL>
Run Code Online (Sandbox Code Playgroud) 一般来说,我对SQL编写非常环保.我试图做的是从具有多个JOINS和WHERE Criteria的SELECT查询返回一个奇异值.
EX:以下返回我之后讨论的3个值:
SELECT TBL5.FIELD1, TBL5.FIELD2, TBL5.FIELD3
FROM TBL1 PA
JOIN TBL2 PH ON PH.PAID = PA.PAID
JOIN TBL3 CM ON CM.CMID = PA.ECMID
JOIN TBL4 HD ON CM.SURID = HD.PHID
JOIN TBL5 PD ON PD.PHID = HD.PHID
WHERE PH.PSID = 1234
AND PA.PAID = 10039528
AND NVL(PA.ECMID,0) > 0
AND CM.CMTV = 'EECR'
AND PD.MAID = 939252
Run Code Online (Sandbox Code Playgroud)
我想要做的是将所有三列TBL5.FIELD1,TBL5.FIELD2,TBL5.FIELD3的值返回为(1)别名字段.根据我目前正在检索的记录,最后2个字段为空,第一个字段返回-32.47.但是当我执行下面的操作时,我得到的所有内容都是[null]而不是预期的(-32.47 + null + null)=( - 32.47)?
SELECT (TBL5.FIELD1 + TBL5.FIELD2 + TBL5.FIELD3) AS TOTAL_REFUND
FROM TBL1 PA
JOIN TBL2 PH ON …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个简单的"Hello World"程序....但它无法正常工作
代码:
CREATE OR REPLACE PROCEDURE greetings
AS
BEGIN
dbms_output.put_line('Hello World!');
END;
/
Run Code Online (Sandbox Code Playgroud)
之后我像这样执行:
EXECUTE greetings;
Run Code Online (Sandbox Code Playgroud)
但是我收到一个错误:
ORA-00900:无效的SQL语句
图片在这里:
请尽快帮帮忙...谢谢:)
我在一个过程中有以下代码片段,当前
apps.fnd_global. apps_initialize方法执行是FORALL循环的一部分.
我想apps.fnd_global. apps_initialize不要在循环中打电话.插入完成后,apps.fnd_global. apps_initialize应该只执行一次.
我怎样才能做到这一点?
FORALL i IN 1 .. my_array.COUNT
INSERT
INTO my_table
......
COMMIT;
apps.fnd_request.submit_request (application => 'PO',
program => 'REQIMPORT',
argument1 => l_p4,
argument2 => l_p5,
argument3 => l_p6,
argument4 => '',
argument5 => 'N',
argument6 => 'N');
COMMIT;
Run Code Online (Sandbox Code Playgroud) 我遇到错误,不知道为什么:
ORA-06502: PL/SQL: numeric or value error
ORA-06512: at "SYS.STANDARD", line 394
ORA-06512: at "DOMINOS.DISTANCE", line 10
ORA-06512: at "DOMINOS.ZOEKWINKELVOORADRES", line 19
ORA-06512: at line 5
Run Code Online (Sandbox Code Playgroud)
光标应包含145行。当我执行该过程时,我在54行之后收到上面的错误消息。
create or replace procedure zoekWinkelVoorAdres
(v_postcode in postcode.postcode%type,
v_huisnr in WINKEL.HUISNR%type,
v_id out WINKEL.ID%type,
v_afstand out number)
is
type lat_array is varray(100000) of POSTCODE.LAT%type;
type lon_array is varray(100000) of POSTCODE.LON%type;
type id_array is varray(100000) of winkel.id%type;
a_lat lat_array;
a_lon lon_array;
a_id id_array;
latwin postcode.lat%type;
lonwin postcode.lon%type;
latklant postcode.lat%type;
lonklant postcode.lon%type;
vafstand number(38);
cursor …Run Code Online (Sandbox Code Playgroud) 我是plsql的新手.我试图在同一个包下放两个脚本.这些脚本处理数组.如何将数组传递给过程?如果我要声明数组,我是在规范还是正文中做到的?我现在正在尝试这个但它不起作用.
CREATE PACKAGE cop_cow_script AS
PROCEDURE COP_COW_DATALOAD_V2(arr_claims VARRAY(15000) OF VARCHAR2(10), arr_sql VARRAY(500) OF VARCHAR2(1000));
END cop_cow_script;
Run Code Online (Sandbox Code Playgroud)
如你所见,我想传递这两个数组.
我有以下简单的代码:
declare
var number;
Begin
var := 1;
select * from Table where Table_ID = :var;
end;
Run Code Online (Sandbox Code Playgroud)
执行它,我收到错误
在SELECT语句中需要一个INTO子句
如果我只是输入它...
select * from Table where Table_ID = 1;
Run Code Online (Sandbox Code Playgroud)
...有用!
这个错误来自哪里?为什么我需要一个Into条款?
代码如下:
cursor c1 is
select x, y, a.z, b.z "a1" from t3 a, t4 b;
Run Code Online (Sandbox Code Playgroud)
以下从c1获取数据为
insert into t1 (x, y, z, z1) values (c1.x, c1.y, c1.z, c1.a1);
Run Code Online (Sandbox Code Playgroud)
编译后,由于未声明组件a1,因此出现错误.和列不允许在这里.PLSQL的新功能,因为我认为不需要声明别名.
我有以下简单的脚本.
declare
begin
null;
end;
create table &&DB_SCHEMA..test_table (
test_column varchar(20)
);
Run Code Online (Sandbox Code Playgroud)
执行它以以下错误结束
ORA-06550:第6行第1列:
PLS-00103:遇到符号"CREATE"
- 00000 - "行%s,列%s:\n%s"
*原因:通常是PL/SQL编译错误.
*行动:
匿名阻止后我不能直接使用DDL吗?我是否被迫EXECUTE IMMEDIATE在匿名区内进行此操作?