标签: plsql

为什么select where查询行为与where where where条件不同而没有单引号

我在使用单引号和没有单引号执行查询时观察到了不同的行为.

使用单引号('121')我快速得到了结果,查询很好地使用了索引.但是没有单引号,查询不使用索引,响应时间很长.

mysql> explain  select * from tbl_n1 where id =121;
+----+-------------+----------------------+------+---------------+------+---------+------+--------+-------------+
| id | select_type | table                | type | possible_keys | key  | key_len | ref  | rows   | Extra       |
+----+-------------+----------------------+------+---------------+------+---------+------+--------+-------------+
|  1 | SIMPLE      | tbl_n1               | ALL  | n1_id      | NULL | NULL    | NULL | 286929 | Using where |
+----+-------------+----------------------+------+---------------+------+---------+------+--------+-------------+
1 row in set (0.00 sec)

mysql> explain  select * from tbl_n1 where id ='121';
+----+-------------+----------------------+------+---------------+----------+---------+-------+------+-------------+
| id | select_type | …
Run Code Online (Sandbox Code Playgroud)

mysql sql plsql plsqldeveloper

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

PL/SQL触发器以防止插入

我需要在PL/SQL中编写触发器.我希望在条件为真时阻止插入.

CREATE OR REPLACE TRIGGER SafeRent AFTER INSERT ON Rent
FOR EACH ROW 
DECLARE
BEGIN
    IF :NEW.id_status IN (1,2) THEN
        DELETE FROM Rent WHERE id_rent = :NEW.id_rent;
    END IF;
END;
Run Code Online (Sandbox Code Playgroud)

代码的扩展:如果id_status等于1或2,我想要插入不要完成.

这是我写的触发器.如果条件为真,它会在插入后删除(我想,我没有测试过)记录.

在插入之前有没有办法阻止它?

我在考虑在'BEFORE INSERT'类型触发器中增加异常,这是一个很好的解决方案吗?

PS:它必须是触发器,我知道它可以作为Check约束来实现.

sql oracle triggers plsql

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

即使条件永远不成立,也会执行IF ELSE条件

这是一个简单的sql语句,用于根据输入的选项打印2个不同的问题.我注意到即使else或if条件不正确,两个语句都会运行.打印的输出是正确的但如果语句不为真,我不需要替换变量来提示用户输入.

SET SERVEROUTPUT ON;

DECLARE 
    choice number(2) := '&Please_Enter_Choice';
    question varchar2(50);
BEGIN
    if choice = 1 then
        question := '&Whats_your_name?';
    else
        if choice = 2 then
          question := '&How_old_are_you?';
        end if;
    end if;

    DBMS_OUTPUT.PUT_LINE(question);
END;
Run Code Online (Sandbox Code Playgroud)

oracle plsql if-statement sqlplus conditional-statements

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

如何将提取的十进制日期转换为oracle中的Datetime

我从EXCEL文件中提取日期,该文件是42885.4253360301excel格式的日期DD-MON-RR HH:MI:SS UTC.我想将十进制值转换为datetime使用oracle函数.如何进行?

oracle plsql etl data-conversion

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

从PL/SQL查询中选择dbms_output缓冲区?

我有一个存储过程mydb.iscustomereligible(someGUID)返回'true'或'false'在一个简单的结果集中.

如果客户不符合条件,则proc会向dbms_output输出一个原因,例如reason code: Invalid Age: 2.

如何改进以下语句以包含dbms_output文本?

select mydb.iscustomereligible('1F2629379C4FA046E050C90A0C5A3000') from dual;
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止所提出的(并且令人沮丧失败),我无法让dbms_output.get_line工作

declare
  v_Data dbms_output.chararr;
  v_NumLines number;
begin
  -- enable the buffer first
  dbms_output.enable(1000000);
  dbms_output.put_line('hi');
  select mydb.iscustomereligible('1F2629379C4FA046E050C90A0C5A3000') from dual;
  select dbms_output.get_line(???) from dual;
end;  
Run Code Online (Sandbox Code Playgroud)

谢谢 :)

sql oracle plsql plsqldeveloper

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

格式化PLSQL开发人员

是否有用于格式化查询的快捷方式plsql developer?我想格式化以下查询:

SELECT * FROM T1, T2 WHERE T1.ID = T2.ID
Run Code Online (Sandbox Code Playgroud)

喜欢:

select 
  *
from
  T1, T2
WHERE
  T1.ID = T2.ID
Run Code Online (Sandbox Code Playgroud)

plsql plsqldeveloper

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

如何使用变量中的参数执行存储过程?

我有一个包含存储过程名称的变量.我想用动态sql执行这个过程,所以我这样做了:

var_procedure是包含我的存储过程名称的变量.firstparameter和secondone是存储过程的varchar参数.

execute immediate var_procedure||'('''||firstparameter||''','''||secondone||''')';
Run Code Online (Sandbox Code Playgroud)

它没有用,我打印出这个基本错误:

ORA-00900: invalid SQL statement
Run Code Online (Sandbox Code Playgroud)

你有解决方案吗 ?

oracle plsql stored-procedures

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

绑定变量"D"未声明

我想在sqlplus中运行一个sql文件.这个sql文件只是将一个包和一些存储过程添加到数据库中.它是使用规范/体分离约定编写的.但是,看起来包装声明部分存在问题,导致身体部分失败.事实上,我不确定"绑定变量"部分是否相关.任何帮助将不胜感激,谢谢.

SQL*Plus: Release 11.2.0.3.0 Production on Wed Dec 20 11:41:36 2017

Copyright (c) 1982, 2011, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Data Mining
and Real Application Testing options

SQL> set timing on;
SQL> set exitcommit off;
SQL> 
SQL> REM Output Log
SQL> REM All script output is SPOOLed here.
SQL> REM Recommend not to change or use SPOOL in other locations
SQL> REM …
Run Code Online (Sandbox Code Playgroud)

oracle plsql sqlplus package urbancode

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

远程调试PL / SQL包

假设我有一个正在运行的Java Web应用程序,我正在其中尝试使用调用数据库中PL / SQL包的JDBC保存一些数据。

在Java代码中,已调用execute()函数,要保存的数据已发送到数据库中的PL / SQL包中,该包将处理数据并最终将其保存。

有没有一种方法可以使用Oracle SQL Developer或PL / SQL Developer即时调试称为PL / SQL的程序包,这些IDE是否支持这种远程调试功能?

java oracle debugging plsql plsqldeveloper

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

在PL/SQL中,如何从用户定义函数返回查询结果?

我从SQL Server来到Oracle 11g,我正在尝试使用SQL Developer创建一个简单的函数(getIDs),它将返回一个查询结果(SELECT id FROM employee).我在互联网上找到的任何东西似乎都没有用.这是我正在尝试的代码:

test_pkg:

CREATE OR REPLACE PACKAGE test_pkg AS 

    TYPE number_table IS TABLE OF NUMBER;

    FUNCTION getIDs RETURN number_table;

END TEST_PKG;
Run Code Online (Sandbox Code Playgroud)

test_pkg正文:

CREATE OR REPLACE PACKAGE BODY test_pkg AS

    FUNCTION getIDs RETURN number_table AS
        ids number_table;
    BEGIN
        SELECT id  BULK COLLECT INTO ids 
        FROM employee;
        RETURN ids;
    END getIDs;

END test_pkg;
Run Code Online (Sandbox Code Playgroud)

SQL Developer工作表:

SELECT * 
FROM TABLE(test_pkg.getIDs());

-- The above gives 
-- ORA-00902: invalid datatype


DECLARE
    nums test_pkg.number_table;
BEGIN
    SELECT column_value BULK COLLECT INTO nums …
Run Code Online (Sandbox Code Playgroud)

oracle plsql oracle-sqldeveloper table-functions

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