CREATE OR REPLACE TYPE gma_trg_eval AS OBJECT (
v_id NUMBER,
v_year NUMBER,
v_max_id NUMBER,
v_min_id NUMBER,
v_max_year NUMBER,
v_min_year NUMBER);
CREATE OR REPLACE TYPE gma_trg_eval_table AS TABLE OF gma_trg_eval;
CREATE OR REPLACE FUNCTION gma_trg_test (v_p NUMBER, v_y NUMBER)
RETURN gma_trg_eval_table PIPELINED
IS
v_r gma_trg_eval;
BEGIN
SELECT MAX (id), MIN (id)
INTO v_r.v_max_id, v_r.v_min_id
FROM gma_trg_time_periods
WHERE year_id = v_y;
SELECT MAX (year_id), MIN (year_id)
INTO v_r.v_max_year, v_r.v_min_year
FROM gma_trg_time_periods;
SELECT year_id, id
INTO v_r.v_year, v_r.v_id
FROM gma_trg_time_periods
WHERE period = …Run Code Online (Sandbox Code Playgroud) 表结构:
Name Null Type
---------- ---- ------------
DPT_NO NUMBER
SALARY NUMBER(10)
PERIOD VARCHAR2(10)
START_DATE DATE
END_DATE DATE
Run Code Online (Sandbox Code Playgroud)
包:
CREATE OR REPLACE package body salary_sal AS
PROCEDURE find_sal(c_dpt_no salary.dpt_no%TYPE) IS
c_sal salary.salary%TYPE;
BEGIN
SELECT salary INTO c_sal
FROM salary
WHERE c_dpt_no= 108;
dbms_output.put_line('Salary: '|| c_sal);
END find_sal;
END salary_sal;
Run Code Online (Sandbox Code Playgroud)
在上面执行时,我得到以下错误
Error: PL/SQL: Compilation unit analysis terminated
Error(1,14): PLS-00201: identifier 'SALARY_SAL' must be declared
Error(1,14): PLS-00304: cannot compile body of 'SALARY_SAL' without its specification.
Run Code Online (Sandbox Code Playgroud) 那么有可能获得当前的代码行吗?
1,2,3,4 v_variable :=(get_line or something???) and in variable are value 4?
5,6,7,8,9 v_variable :=(get_line or something???) and in variable are value 9?
Run Code Online (Sandbox Code Playgroud)
我只是想找到最简单的方法来捕获错误谢谢.
1,2,3,4, code lines...
Run Code Online (Sandbox Code Playgroud) 为什么要获得重复记录?请纠正我.谢谢你.
declare
clazzes_rec clazzes%rowtype;
cursor clazzes_cur is select * from clazzes;
begin
if clazzes_cur%isopen then
dbms_output.put_line('Cursor is not open,trying to Open.... ... .. .');
end if;
open clazzes_cur;
dbms_output.put_line('Cursor opened :');
loop
fetch clazzes_cur into clazzes_rec;
dbms_output.put_line('id:'||clazzes_rec.id||':name:'||clazzes_rec.name);
exit when clazzes_cur%notfound;
end loop;
close clazzes_cur;
end;
Run Code Online (Sandbox Code Playgroud)
输出:
Cursor opened :
id:1:name:leo1
id:2:name:leo2
id:3:name:leo3
id:4:name:leo4
id:4:name:leo4
PL/SQL procedure successfully completed
Run Code Online (Sandbox Code Playgroud) 我有一个用SQL Server编写的T-SQL例程.我们正在迁移到Oracle,因此我尝试将其移植到PL/SQL.这是T-SQL例程(简化); 请注意使用表值变量,在Oracle中,它将成为"嵌套表"类型的PL/SQL变量.我的问题的主要内容是在PL/SQL中使用这种"集合"对象的最佳方法.移植代码中的几个操作(下面的第二个代码示例)非常笨拙,在SQL Server原始版本中它们似乎更容易:
DECLARE @MyValueCollection TABLE( value VARCHAR(4000) );
DECLARE @valueForThisRow VARCHAR(4000);
DECLARE @dataItem1Val INT, @dataItem2Val INT, @dataItem3Val INT, @dataItem4Val INT;
DECLARE theCursor CURSOR FAST_FORWARD FOR
SELECT DataItem1, DataItem2, DataItem3, DataItem4 FROM DataTable;
OPEN theCursor;
FETCH NEXT FROM theCursor INTO @dataItem1Val, @dataItem2Val, @dataItem3Val, @dataItem4Val;
WHILE @@FETCH_STATUS = 0
BEGIN
-- About 50 lines of logic that evaluates @dataItem1Val, @dataItem2Val, @dataItem3Val, @dataItem4Val and constructs @valueForThisRow
SET @valueForThisRow = 'whatever';
-- !!! This is the row that seems to have no …Run Code Online (Sandbox Code Playgroud) CREATE OR REPLACE TYPE nvarchar2_list_type AS TABLE OF NVARCHAR2(100);
CREATE TABLE test_table(
id number primary key,
cars_list nvarchar2_list_type
)
NESTED TABLE cars_list STORE AS cars_list_storage_table;
insert into test_table(id, cars_list)
values(1, nvarchar2_list_type( 'AUDI', 'MERCEDES') );
Run Code Online (Sandbox Code Playgroud)
以上所有操作都成功完成,在test_table表中插入1行,现在我写了这个函数:
create or replace function get_cnt
return number
as
ret_val number;
begin
SELECT cars_list.COUNT
INTO ret_val
from test_table where id = 1;
return ret_val;
end;
Run Code Online (Sandbox Code Playgroud)
这给出了错误: ORA-00904: "CARS_LIST"."COUNT": invalid identifier
请告诉我这里有什么问题?
据我所知,COUNT必须使用方法(从这里)
我可以通过编程方式执行此操作,但正在寻找更清晰的解决方案.
假设我有下表:
First Name Last Name
Smith Albert
Smith Alphonse
Smith Jason
Johnson Charles
Roberts Chris
Roberts Christian
Run Code Online (Sandbox Code Playgroud)
我想用以下规则创建一个独特的
对于艾伯特史密斯,我会回到Alb.Smith
对于查尔斯约翰逊,我会回归约翰逊
为克里斯蒂安罗伯茨我会回归基督.罗伯茨
有没有人对如何在Oracle SQL语句中直接完成此任务有任何想法,还是应该坚持在程序中执行此操作?
为什么在基于表的列创建函数时在user_tab_cols中创建条目?
create table t1(a varchar2(100), b number);
select * from user_tab_cols where table_name = 'T1'; -- Two rows coming
create index idx1 on t1(upper(a));
select * from user_tab_cols where table_name = 'T1'; -- Three rows coming
Run Code Online (Sandbox Code Playgroud)
在user_tab_cols中输入条目的原因是什么?
我在数据库列中有大写单词(NO,YES,FAIL)这些单词我需要选择这些列值为No,Yes,Fail(只有拳头字母大写和其他字母是小写)
p/l sql中是否有任何内置函数?