我有以下代码片段,我想知道如何检查关联数组中是否存在条目
set serveroutput on;
DECLARE
TYPE per_form_metric IS record
(
output_achieved_itd NUMBER,
output_achieved_ptd NUMBER
);
TYPE per_form_metrics_tbl IS TABLE OF per_form_metric INDEX BY VARCHAR2(10) ;
TYPE interval_number_tbl IS TABLE OF per_form_metrics_tbl INDEX BY VARCHAR2(10) ;
TYPE ms_output_tbl IS TABLE OF interval_number_tbl INDEX BY VARCHAR2(100) ;
g_ms_output_tbl ms_output_tbl ;
l_per_f_rec per_form_metric;
l_per_f_tbl per_form_metrics_tbl;
l_per_int_tbl interval_number_tbl;
l_ms_out_tbl ms_output_tbl;
BEGIN
l_per_f_rec.output_achieved_itd := 1000;
l_per_f_rec.output_achieved_ptd := 1000;
l_per_f_tbl('Period 1') := l_per_f_rec;
l_per_int_tbl('Interval 1') := l_per_f_tbl;
l_ms_out_tbl('1') := l_per_int_tbl;
-- Now get me the output_achieved_itd …Run Code Online (Sandbox Code Playgroud) 特别是,我一直试图找到ORA-0955的名称来提高代码的可读性.
目前我正在使用以下内容:
EXCEPTION
WHEN OTHERS THEN
IF SQLCODE = -00955
Run Code Online (Sandbox Code Playgroud)
我更喜欢的是:
EXCEPTION
WHEN OBJECT_EXISTS THEN
Run Code Online (Sandbox Code Playgroud)
这对我来说似乎更清洁,我更喜欢这样.但我查看了SYS.STANDARD,它列出了相对较少的命名异常.在线文档似乎反映了SYS.STANDARD中的内容.还有其他包可以查看吗?其他一些资源?
我有一个具有一个存储过程SYS_REFCURSOR作为一个OUT参数.签名例如如下:
PROCEDURE myProc(p_someID IN INTEGER, p_cursor OUT SYS_REFCURSOR);
Run Code Online (Sandbox Code Playgroud)
我从一个函数调用这个过程,我必须将一个名为clientIDfrom的列复制p_cursor到一个标量嵌套表中.
我这样做:
CREATE OR REPLACE FUNCTION myFunction
RETURN sys_refcursor
IS
someID INTEGER := 1234;
myCursor SYS_REFCURSOR;
TYPE t_clientID_nt IS TABLE OF NUMBER(16,0);
clientID_nt t_clientID_nt;
otherID SYS_REFCURSOR;
BEGIN
myProc (someID, myCursor);
FOR i IN myCursor
LOOP
clientID_nt.EXTEND;
clientID_nt (clientID_nt.COUNT) := i.clientID;
END LOOP;
-- Other code that opens the cursor otherID
-- based on the IDs in clientID_nt
...
...
RETURN otherID;
END;
/
Run Code Online (Sandbox Code Playgroud)
当我尝试编译这个函数时,我得到的错误是: …
我很想知道用Hadoop替换我的Oracle数据库并了解Hadoop生态系统.
我有很多PL/SQL脚本需要更换,如果我去这条路线.
我的印象是,通过一些努力,我可以将任何PL/SQL脚本转换/翻译成类似的Pig Latin脚本.如果不仅是Pig Latin,那么通过Oozie将Hive和Pig结合起来.
它是否正确?
我刚开始学习PL/SQL,我不知道如何创建一个过程.逻辑似乎是对的,但我认为第一行有一些语法错误.这是我的代码: -
CREATE OR REPLACE PROCEDURE ReverseOf(input IN varchar2(50)) IS
DECLARE
reverse varchar2(50);
BEGIN
FOR i in reverse 1..length(input) LOOP
reverse := reverse||''||substr(input, i, 1);
END LOOP;
dbms_output.put_line(reverse);
END;
/
Run Code Online (Sandbox Code Playgroud) 这是我的一个查询的结果:
SURGERY_D
---------
01-APR-05
02-APR-05
03-APR-05
04-APR-05
05-APR-05
06-APR-05
07-APR-05
11-APR-05
12-APR-05
13-APR-05
14-APR-05
15-APR-05
16-APR-05
19-APR-05
20-APR-05
21-APR-05
22-APR-05
23-APR-05
24-APR-05
26-APR-05
27-APR-05
28-APR-05
29-APR-05
30-APR-05
Run Code Online (Sandbox Code Playgroud)
我想将连续的日期范围折叠成间隔.举些例子,
[01-APR-05, 07-APR-05], [11-APR-05, 16-APR-05] and so on.
Run Code Online (Sandbox Code Playgroud)
在时态数据库方面,我想"崩溃"日期.知道如何在Oracle上做到这一点?我正在使用版本11.我搜索它并阅读了一本书,但找不到/理解如何做到这一点.这可能很简单,但每个人都有自己的缺陷,Oracle就是我的.此外,我是新来的,所以如果我违反了任何规则我会道歉.谢谢!
我正在尝试运行一个置换给定字符串的递归过程.它正在sqldeveloper上进行编译但是当我尝试使用输入运行时它给我ora-06502:第13行的数字或值错误(前缀赋值)
create or replace
procedure print_anagrams
(pre in varchar2, str in varchar2)
is
prefix varchar2(30);
stringg varchar2(30);
strlen number;
begin
strlen := length(str);
if strlen = 0 then
dbms_output.put_line(pre);
else
for i in 1..strlen loop
prefix := pre || SUBSTR(str,i,1);
stringg := SUBSTR(str,1,i) || SUBSTR(str,i+1,strlen);
print_anagrams(prefix,stringg);
end loop;
end if;
end;
Run Code Online (Sandbox Code Playgroud) 这是我的串行表:
+-----------------+-----------------+
| START_SERIAL | END_SERIAL |
+-----------------+-----------------+
| 120500216057150 | 120500216057155 |
| 120500216057157 | 120500216057157 |
| 120500216057161 | 120500216057164 |
+-----------------+-----------------+
Run Code Online (Sandbox Code Playgroud)
需要得到这样的结果:
120500216057150
120500216057151
120500216057152
120500216057153
120500216057154
120500216057155
120500216057157
120500216057161....
Run Code Online (Sandbox Code Playgroud)
请帮我解决这个问题.[似乎需要带有for循环的pl-sql.?]
编辑 亲爱的TechDo,如下pl/sql用法如下.但它给了我一个错误:-)
DECLARE
start_serial NUMBER;
end_serial NUMBER;
records NUMBER;
BEGIN
select start_serial INTO start_serial
from sales_details ;
select (start_serial+no_of_cards)as end_serial into end_serial
from sales_details;
select count(*) as records into records
from sales_details;
FOR i IN 1..records LOOP
INSERT INTO temp (serial_no)
VALUES(i);
END LOOP;
END;
/
Run Code Online (Sandbox Code Playgroud) &nOracle PL/SQL中的这个声明是什么意思?代码示例中的用法(取自此处)如下所示:
DECLARE
myex EXCEPTION;
PRAGMA EXCEPTION_INIT(myex,-20015);
n NUMBER := &n;
BEGIN
FOR i IN 1..n LOOP
dbms_output.put.line(i);
IF i=n THEN
RAISE myex;
END IF;
END LOOP;
EXCEPTION
WHEN myex THEN
dbms_output.put.line('loop is end');
END;
Run Code Online (Sandbox Code Playgroud) 假设我有一个包含mySpec.pks中定义的规范的包
CREATE OR REPLACE PACKAGE TEST_PKG AS
PROCEDURE TEST_1 ( asdf int );
PROCEDURE TEST_2 ( asdf int, asdf2 char );
END;
Run Code Online (Sandbox Code Playgroud)
是否可以将每个过程的实现拆分为多个主体"CREATE OR REPLACE PACKAGE BODY"语句?我正在为身体文件想象这样的东西:
test1.pkb(仅执行过程*TEST_1*)
CREATE OR REPLACE PACKAGE BODY TEST_PKG AS
PROCEDURE TEST_1 ( asdf int ) IS
BEGIN
--do stuff
END;
END;
Run Code Online (Sandbox Code Playgroud)
test2.pkb(仅执行过程*TEST_2*)
CREATE OR REPLACE PACKAGE BODY TEST_PKG AS
PROCEDURE TEST_2 ( asdf int, asdf2 char ) IS
BEGIN
--do stuff
END;
END;
Run Code Online (Sandbox Code Playgroud) plsql ×10
oracle ×9
sql ×6
apache-pig ×1
cursor ×1
database ×1
exception ×1
hadoop ×1
hive ×1
oozie ×1
oracle11g ×1
oracle11gr2 ×1
recursion ×1
sqlplus ×1
syntax-error ×1