我正在研究一个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)
是否有捷径可寻?
我需要直接从oracle PL/SQL包发送HTML电子邮件.这几乎没问题.
我有问题的是,一些从表中获取的数据包含之类的东西<S>,<L>和类似的片段,有时AR视为HTML标签,即使没有,他们总是忽略,从不显示.
因此,我需要在插入电子邮件正文之前转义此列.
是否有自动将html特殊字符转换为实体的功能?或者我需要replace('<', '<', string)手动所有特殊字符?
我无法弄清楚以下伪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所说的:
好吧,我认为只有价值条款才有可能......有替代方案吗?
只是关于交易的问题将在查询中使用空值.
例如,我有下表,其中包含以下字段和值
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变量.
对不起,如果我的问题有点令人困惑.我解释事情并不是那么好.提前致谢.
我得到这个错误我无法弄清楚出了什么问题.
第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) 有什么区别PERCENTILE_DISC和PERCENTILE_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) 我正在尝试使用一个过程(没有参数)来删除程序启动过程中位于模式中的所有用户创建的数据库对象,但我真的不确定如何解决这个问题.这是我到目前为止所拥有的,但我认为我的方式是错误的.
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存储过程,它已在本地开发实例和运行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) 如何判断是否正在使用PL/SQL包,过程或函数?是否有包含有关PL/SQL包,过程或函数用法的统计信息的Oracle表或视图?