标签: plsql

创建ORA-01422的原因:精确提取返回的请求行数超过了请求的行数

所以我正在开发一个安装程序,安装程序连接到数据库并创建表并填充它们.除非我尝试将行添加到certian表中,否则此方法的每个方面都能正常工作.

declare
  retVal INTEGER;
  rptID INTEGER;
  catID INTEGER;
  wsID INTEGER;
  paramID INTEGER;
  dtID INTEGER;
begin

  select PK into catID from RPT_CATEGORY where KEYVALUE = 'ProductivityReportsCategory';
  select PK into rptID from RPT_REPORT where KEYVALUE = 'ProductivitySummaryReport2';
  select PK into wsID from RPT_WEBSVC where KEYVALUE = 'NotApplicable' and category_fk = catID;
Run Code Online (Sandbox Code Playgroud)

填充数据库的select语句如下所示:

  select PK into wsID from RPT_WEBSVC where KEYVALUE = 'GetMachineNameList' and category_fk = catID;
  paramID := RPT_CONFIGURATION.ADD_PARAMETER( rptID, wsID, dtID, 'Machine', 'parameters.GetProductivityDataSet3.inserterid', 4, NULL, NULL, NULL, 0, 0, 0, 'Y', …
Run Code Online (Sandbox Code Playgroud)

c# oracle plsql oracle10g ora-01422

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

在Oracle DB的CLOB字段中存储文件

我的oracle表中有一个CLOB数据类型的列.如何在此列中存储.txt文件以及如何检索相同的文件?

下面是表定义

fileID  Number
logFile CLOB
Run Code Online (Sandbox Code Playgroud)

提前致谢

plsql oracle10g

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

SQL查询非字母名称字段

我在employee表中有一个Name列.我希望看到所有员工姓名都有字母以外的字符.对此最好的查询是什么?

另一个要求:返回所有甚至没有单个字母的名称.

注意:在这种情况下,任何其他英文字母都不被视为字母.在我的场景中,'AndréMüller'的文字中有一些非字母的字符.

DECLARE @Employee TABLE (EmpID INT, EmpName VARCHAR(1000))
INSERT INTO @Employee (EmpID, EmpName) VALUES(1,'André Müller')
INSERT INTO @Employee (EmpID, EmpName) VALUES(2,'Lijo')
INSERT INTO @Employee (EmpID, EmpName) VALUES(3,'88')
INSERT INTO @Employee (EmpID, EmpName) VALUES(4,'--@#')
INSERT INTO @Employee (EmpID, EmpName) VALUES(5,'é ü')
Run Code Online (Sandbox Code Playgroud)

Aproach 1和Approach 2都在工作(感谢发布答案的人).哪个更好,为什么?

--Aproach 1
SELECT * FROM @Employee WHERE EmpName COLLATE Latin1_General_CI_AS LIKE '%[^a-z]%'

--Approach 2
SELECT * FROM @Employee WHERE EmpName LIKE '%[^a-zA-Z]%'
Run Code Online (Sandbox Code Playgroud)

谢谢

Lijo

.net sql t-sql sql-server plsql

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

如何在Oracle 11g SQL中将整数添加到char?

是否可以在PL/SQL块中执行类似的操作:

SELECT 'a'+1 FROM dual;

结果应该是"b".

sql oracle plsql oracle11g

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

GROUP BY子句中的ORDER BY

我有一个问题

 Select
 (SELECT id FROM xyz M  WHEREM.ID=G.ID AND ROWNUM=1 ) TOTAL_X,
count(*) from mno G where col1='M' group by col2  
Run Code Online (Sandbox Code Playgroud)

现在从子查询我必须为此获取ramdom id

     Select
 (SELECT id FROM xyz M  WHEREM.ID=G.ID AND ROWNUM=1 order by dbms_random.value ) TOTAL_X,
count(*) from mno G where col1='M' group by col2 
Run Code Online (Sandbox Code Playgroud)

但是,oracle显示错误

"Missing right parenthesis".
Run Code Online (Sandbox Code Playgroud)

查询有什么问题,我怎么能得到这个查询来获得随机ID.请帮忙.

sql oracle plsql

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

没有与Oracle功能的短路OR?

要允许超级用户/管理员登录我的系统,我正在运行(更大版本)此查询:

Select *
  From mytable
 Where (:id = 'Admin' Or :id = mytable.id);
Run Code Online (Sandbox Code Playgroud)

如果我传递用户ID,我会获得该用户的所有数据; 如果我传递字符串'Admin',我会得到所有数据.这是有效的,因为Oracle的OR是一个短路运算符.

但是,如果我将'Admin'作为一个包常量并使用函数来获取它,就像这样

Select *
  From mytable
 Where (:id = mypackage.GetAdminConstant Or :id = mytable.id);
Run Code Online (Sandbox Code Playgroud)

ORA-01722: invalid number当我通过'Admin'时,我得到了.

当我引入函数时,为什么OR会失去其短路方面?

sql oracle plsql short-circuiting

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

Oracle错误:无法在查询中执行DML

为什么我会收到以下错误?

Error starting at line 1 in command:

select FUNC from dual
Error report:
SQL Error: ORA-14551: cannot perform a DML operation inside a query 
ORA-06512: at "ANONYMOUS.FUNC", line 15
14551. 00000 -  "cannot perform a DML operation inside a query "
*Cause:    DML operation like insert, update, delete or select-for-update
           cannot be performed inside a query or under a PDML slave.
*Action:   Ensure that the offending DML operation is not performed or
           use an autonomous transaction to perform the …
Run Code Online (Sandbox Code Playgroud)

sql oracle plsql stored-procedures dml

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

尝试使用Java运行PL/SQL脚本

我熟悉Java JDBC并经常使用它来运行简单的SQL.但是,我想运行类似下面的内容.这比普通的SQL更多PL/SQL,因此我的问题.我不是从Oracle机箱运行它,而是从我自己的计算机运行它.有人可以帮助我使用Java运行这种PL/SQL吗?

spool C:\count.txt;
DEFINE date="TO_DATE ('08-29-2011','mm-dd-yyyy')";
SET NEWPAGE 0;
SET SPACE 0;
SET LINESIZE 500;
SET PAGESIZE 0;
SET ECHO OFF;
SET FEEDBACK OFF;
SET VERIFY OFF;
SET HEADING OFF;
SET TRIMSPOOL ON;
alter session set nls_date_format='yyyy-mm-dd hh24:mi';
select 'TABLE1', count(*) from SCHEMA.TABLE1 where modifyts < &date;
select 'TABLE2', count(*) from SCHEMA.TABLE2 where modifyts < &date;
select 'TABLE3', count(*) from SCHEMA.TABLE3 where modifyts < &date;
spool off;
Run Code Online (Sandbox Code Playgroud)

java oracle plsql jdbc

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

Oracle存储过程游标始终返回零行

我把这个光标放在一个包中的过程中:

PROCEDURE CANCEL_INACTIVE(IN_DAYS_OLD NUMBER)
IS
    CURSOR inactive IS
          SELECT * FROM MY_TABLE
          WHERE STATUS_CHANGED_DATE <= TRUNC(SYSDATE-IN_DAYS_OLD) 
          AND CANCEL_CD IS NULL;

  rec  inactive%ROWTYPE;

BEGIN
     OPEN inactive;
     LOOP
          FETCH inactive INTO rec;
          EXIT WHEN inactive%NOTFOUND;

          -- do an update based on rec.id
     END LOOP;
END;

END CANCEL_INACTIVE;
Run Code Online (Sandbox Code Playgroud)

每次我测试或运行该过程时,非活动始终为零行.但是,当我将EXACT相同的查询放入SQL窗口时,我得到了我正在寻找的行.

有没有搞错?

oracle plsql

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

程序中的PL/SQL异常处理

这是一个关于最佳实践的问题.我有一个类似于此的PL/SQL块

DECLARE

    --work variables

    PROCEDURE p1(in_parameter1, out_parameter1, out_parameter2...) IS
    BEGIN    
        --do stuff
        --select ( ... ) into ( ... ) from t1 where ( ... )
    END;

    PROCEDURE p2(in_parameter1, out_parameter1, out_parameter2...) IS
    BEGIN 
        --do stuff
        --insert/update tables
        --do more stuff
    END;    

BEGIN -- MAIN PROCESS STARTS HERE

    open c1;
    fetch c1 into c1RowData;
    EXIT WHEN c1%NOTFOUND    
     --call procedure1
     --do stuff
     --call procedure2
     --do stuff
     --do stuff
     --call procedure1
     --call procedure2
END;
/
EXIT;
Run Code Online (Sandbox Code Playgroud)

过程p1和p2中的语句可能会引发异常(NO_DATA_FOUND,DUP_VAL_ON_INDEX,...).

您认为处理此异常的最佳方法是什么?它们是应该在程序内处理还是你认为我应该用TRY-CATCH块围绕每个调用主体中的程序?

plsql stored-procedures exception-handling

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