标签: plsql

PL/SQL Oracle对未初始化复合的引用

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)

oracle plsql

2
推荐指数
1
解决办法
6485
查看次数

执行程序包时出错

表结构:

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)

oracle plsql syntax-error

2
推荐指数
1
解决办法
2万
查看次数

Oracle pl/sql代码行(行)到变量

那么有可能获得当前的代码行吗?

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)

oracle plsql

2
推荐指数
1
解决办法
1658
查看次数

Oracle的游标与最终记录的重复

为什么要获得重复记录?请纠正我.谢谢你.

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)

oracle plsql

2
推荐指数
1
解决办法
1984
查看次数

从PL/SQL变量一次一个地添加元素到集合变量?

我有一个用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)

oracle plsql oracle11g

2
推荐指数
1
解决办法
1万
查看次数

正确使用收集方法

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必须使用方法(从这里)

oracle plsql user-defined-types oracle11g

2
推荐指数
1
解决办法
128
查看次数

创建一个pl/sql函数并找到闰年

请告诉我如何通过PL/SQL函数找到闰年.假设我们输入任何数字,我们怎么能发现它是闰年?

oracle plsql

2
推荐指数
1
解决办法
1万
查看次数

在Oracle中创建名字的唯一字符串

我可以通过编程方式执行此操作,但正在寻找更清晰的解决方案.

假设我有下表:

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语句中直接完成此任务有任何想法,还是应该坚持在程序中执行此操作?

oracle plsql

2
推荐指数
1
解决办法
860
查看次数

基于函数的索引和user_tab_cols

为什么在基于表的列创建函数时在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中输入条目的原因是什么?

oracle plsql

2
推荐指数
1
解决办法
609
查看次数

如何在P/L SQL中仅转换为第一个大写字母和其他字母小写?

我在数据库列中有大写单词(NO,YES,FAIL)这些单词我需要选择这些列值为No,Yes,Fail(只有拳头字母大写和其他字母是小写)

p/l sql中是否有任何内置函数?

sql oracle plsql oracle11g

2
推荐指数
1
解决办法
1239
查看次数

标签 统计

oracle ×10

plsql ×10

oracle11g ×3

sql ×1

syntax-error ×1

user-defined-types ×1