标签: plsql


有没有办法获得抛出异常的行号?

我正在研究一个pl-sql脚本,其中我有大约10个TO_CHAR转换.

其中一个是抛出一个

ORA-06502: PL/SQL: numeric or value error: character string buffer too small
Run Code Online (Sandbox Code Playgroud)

例外.

目前,我使用这段代码记录消息

EXCEPTION
  WHEN OTHERS THEN
    DBMS_OUTPUT.put_line('Exception message is '||SQLERRM(sqlcode));
    ROLLBACK;
Run Code Online (Sandbox Code Playgroud)

我想添加(主要是出于调试目的)引发异常的行,以便以形式接收消息

ORA-06502: PL/SQL: numeric or value error: character string buffer too small (at line x)
Run Code Online (Sandbox Code Playgroud)

是否有捷径可寻?

logging plsql

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

如何在Oracle PL/SQL中将<,>和&字符转义为html实体

我需要直接从oracle PL/SQL包发送HTML电子邮件.这几乎没问题.

我有问题的是,一些从表中获取的数据包含之类的东西<S>,<L>和类似的片段,有时AR视为HTML标签,即使没有,他们总是忽略,从不显示.

因此,我需要在插入电子邮件正文之前转义此列.

是否有自动将html特殊字符转换为实体的功能?或者我需要replace('<', '&lt;', string)手动所有特殊字符?

html oracle plsql escaping html-escape-characters

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

PLSQL插入子查询和返回子句(Oracle)

我无法弄清楚以下伪sql的正确语法:

INSERT INTO some_table
           (column1,
            column2)
     SELECT col1_value, 
            col2_value 
       FROM other_table
      WHERE ...       
  RETURNING id
       INTO local_var; 
Run Code Online (Sandbox Code Playgroud)

我想插入一些子查询的值.插入后我需要新生成的id.

以下是oracle doc所说的:

插入声明

回归

好吧,我认为只有价值条款才有可能......有替代方案吗?

sql oracle plsql insert return-value

19
推荐指数
3
解决办法
4万
查看次数

关于where子句的Oracle/PL SQL/SQL null比较

只是关于交易的问题将在查询中使用空值.

例如,我有下表,其中包含以下字段和值

TABLEX
Column1
1        
2        
3      
4        
5      
---------
Column2
null
A
B
C
null
Run Code Online (Sandbox Code Playgroud)

我在特定程序上传递变量Y. 程序里面是这样的游标

CURSOR c_results IS
SELECT * FROM TABLEX where column2 = variableY
Run Code Online (Sandbox Code Playgroud)

现在问题是变量Y可以是null,A,B或C如果变量Y是null我想选择column2为null的所有记录,否则其中column2是A,B或C.

我不能做上面的游标/查询,因为如果variableY为null,它将无法工作,因为比较应该是

CURSOR c_results IS
SELECT * FROM TABLEX where column2 IS NULL
Run Code Online (Sandbox Code Playgroud)

我应该使用哪种光标/查询来容纳null或string变量.

对不起,如果我的问题有点令人困惑.我解释事情并不是那么好.提前致谢.

sql oracle null plsql

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

PL/SQL ORA-01422:精确提取返回超过请求的行数

我得到这个错误我无法弄清楚出了什么问题.

第1行的DECLARE
*
ERROR:
ORA-01422:精确提取返回超过请求的行数
ORA-06512:第11行

这是我的代码.

DECLARE
    rec_ENAME EMPLOYEE.ENAME%TYPE;
    rec_JOB EMPLOYEE.DESIGNATION%TYPE;
    rec_SAL EMPLOYEE.SALARY%TYPE;
    rec_DEP DEPARTMENT.DEPT_NAME%TYPE;
BEGIN       
    SELECT EMPLOYEE.EMPID, EMPLOYEE.ENAME, EMPLOYEE.DESIGNATION, EMPLOYEE.SALARY,  DEPARTMENT.DEPT_NAME 
    INTO rec_EMPID, rec_ENAME, rec_JOB, rec_SAL, rec_DEP 
    FROM EMPLOYEE, DEPARTMENT 
    WHERE EMPLOYEE.SALARY > 3000;

    DBMS_OUTPUT.PUT_LINE ('Employee Nnumber: ' || rec_EMPID);
    DBMS_OUTPUT.PUT_LINE ('---------------------------------------------------');
    DBMS_OUTPUT.PUT_LINE ('Employee Name: ' || rec_ENAME);
    DBMS_OUTPUT.PUT_LINE ('---------------------------------------------------');
    DBMS_OUTPUT.PUT_LINE ('Employee Designation: ' || rec_JOB);
    DBMS_OUTPUT.PUT_LINE ('----------------------------------------------------');
    DBMS_OUTPUT.PUT_LINE ('Employee Salary: ' || rec_SAL);
    DBMS_OUTPUT.PUT_LINE ('----------------------------------------------------');
    DBMS_OUTPUT.PUT_LINE ('Employee Department: ' || rec_DEP);

END;
/
Run Code Online (Sandbox Code Playgroud)

oracle plsql sqlplus oracle11g

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

percentile_disc vs percentile_cont

有什么区别PERCENTILE_DISCPERCENTILE_CONT,

我有一个表### select*from childstat

FIRSTNAME                                          GENDER BIRTHDATE     HEIGHT     WEIGHT
-------------------------------------------------- ------ --------- ---------- ----------
lauren                                             f      10-JUN-00         54        876 
rosemary                                           f      08-MAY-00         35        123 
Albert                                             m      02-AUG-00         15        923 
buddy                                              m      02-OCT-00         15        150 
furkar                                             m      05-JAN-00         76        198 
simon                                              m      03-JAN-00         87        256 
tommy                                              m      11-DEC-00         78        167 
Run Code Online (Sandbox Code Playgroud)

而我正试图区分那些百分位数

select firstname,height,
       percentile_cont(.50) within group (order by height) over() as pctcont_50_ht,
       percentile_cont(.72) within group (order by height) over() as pctcont_72_ht,
       percentile_disc(.50) within group (order by height) …
Run Code Online (Sandbox Code Playgroud)

sql oracle plsql

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

PLSQL - 删除用户的所有数据库对象

我正在尝试使用一个过程(没有参数)来删除程序启动过程中位于模式中的所有用户创建的数据库对象,但我真的不确定如何解决这个问题.这是我到目前为止所拥有的,但我认为我的方式是错误的.


create or replace procedure CLEAN_SCHEMA is
cursor schema_cur is
select 'drop '||object_type||' '|| object_name||  DECODE(OBJECT_TYPE,'TABLE',' CASCADE CONSTRAINTS;',';')
from user_objects;
schema_rec schema_cur%rowtype;
begin
select 'drop '||object_type||' '|| object_name||  DECODE(OBJECT_TYPE,'TABLE',' CASCADE CONSTRAINTS;',';')
into schema_rec
from user_objects;
end;
/

oracle schema plsql stored-procedures

18
推荐指数
3
解决办法
4万
查看次数

当唯一索引出现时,Oracle 10g和11g之间REF CURSOR的行为不同?

描述

我有一个Oracle存储过程,它已在本地开发实例和运行Oracle 8,然后是9,然后是10和最近11的多个客户端测试和生产实例上运行了大约7年.它一直工作直到升级到Oracle 11g.基本上,该过程打开引用游标,更新表然后完成.在10g中,光标将包含预期的结果,但在11g中,光标将为空.升级到11g后没有更改DML或DDL.这种行为在我尝试过的每10g或11g实例上都是一致的(10.2.0.3,10.2.0.4,11.1.0.7,11.2.0.1 - 所有在Windows上运行).

具体的代码要复杂得多,但要用一些现实的概述来解释这个问题:我在头表中有一些数据,还有一堆子表将输出到PDF.头表有一个布尔值(NUMBER(1),其中0表示false,1表示为真)列表示该数据是否已被处理.

视图仅限于显示尚未处理的行(视图还连接到其他一些表,进行一些内联​​查询和函数调用等).因此,在打开游标时,视图显示一行或多行,然后在游标打开后运行update语句以翻转头表中的标志,发出提交,然后过程完成.

在10g上,游标打开,它包含行,然后update语句翻转标志并再次运行该过程将不产生任何数据.

在11g上,游标永远不会包含该行,就好像在更新语句运行之后光标才会打开.

我担心可能会影响其他程序和其他应用程序的11g(希望是可配置的设置)中的某些内容可能已发生变化.我想知道的是,是否有人知道为什么两个数据库版本之间的行为不同,以及是否可以在没有代码更改的情况下解决问题.

更新1:我设法将问题跟踪到一个独特的约束.似乎当11g中存在唯一约束时,无论我是否针对实际对象运行真实世界代码或以下简单示例,该问题在100%的时间内都是可再现的.

更新2:我能够从等式中完全消除视图.我已经更新了简单的示例,以便即使在直接查询表时也存在问题.

简单的例子

CREATE TABLE tbl1
(
  col1  VARCHAR2(10),
  col2  NUMBER(1)
);

INSERT INTO tbl1 (col1, col2) VALUES ('TEST1', 0);

/* View is no longer required to demonstrate the problem
CREATE OR REPLACE VIEW vw1 (col1, col2) 
AS 
SELECT col1, col2 
  FROM tbl1 
 WHERE col2 = 0;
*/

CREATE OR REPLACE PACKAGE pkg1
AS
   TYPE refWEB_CURSOR IS REF CURSOR;

   PROCEDURE proc1 (crs  OUT  refWEB_CURSOR);

END …
Run Code Online (Sandbox Code Playgroud)

oracle plsql stored-procedures oracle10g oracle11g

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

如何判断是否正在使用PL/SQL包,过程或函数?

如何判断是否正在使用PL/SQL包,过程或函数?是否有包含有关PL/SQL包,过程或函数用法的统计信息的Oracle表或视图?

oracle statistics plsql dead-code

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