我在使用单引号和没有单引号执行查询时观察到了不同的行为.
使用单引号('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) 我需要在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语句,用于根据输入的选项打印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) 我从EXCEL文件中提取日期,该文件是42885.4253360301excel格式的日期DD-MON-RR HH:MI:SS UTC.我想将十进制值转换为datetime使用oracle函数.如何进行?
我有一个存储过程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)
谢谢 :)
是否有用于格式化查询的快捷方式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) 我有一个包含存储过程名称的变量.我想用动态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)
你有解决方案吗 ?
我想在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) 假设我有一个正在运行的Java Web应用程序,我正在其中尝试使用调用数据库中PL / SQL包的JDBC保存一些数据。
在Java代码中,已调用execute()函数,要保存的数据已发送到数据库中的PL / SQL包中,该包将处理数据并最终将其保存。
有没有一种方法可以使用Oracle SQL Developer或PL / SQL Developer即时调试称为PL / SQL的程序包,这些IDE是否支持这种远程调试功能?
我从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)