标签: plsql

SQL SELECT(初学者)

我有2张桌子:

Departament

id_dep, name_dep
Run Code Online (Sandbox Code Playgroud)

雇员

id_dep, salary
Run Code Online (Sandbox Code Playgroud)

我想获得所有工资都低于7000的部门的名称.我必须创建一个SELECT声明.我是SQL的初学者,如果我会浪费你的时间,我很抱歉,但我需要帮助.

我有一个解决方案,但我不知道是否好:

SELECT name_dep
FROM departments
WHERE employee.salary < 7000
MINUS
SELECT name_dep
FROM departments
WHERE employee.salary >= 7000
Run Code Online (Sandbox Code Playgroud)

sql oracle plsql

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

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

回滚错误日志不起作用的原因?

我知道回滚不应该在错误日志上工作,但应该以合理的方式.让我考虑以下示例.

CREATE OR REPLACE procedure error_ins
AS
BEGIN
   INSERT INTO dummy VALUES(4) LOG ERRORS INTO ERROR_LOG_DMLEL;
   INSERT INTO dummy VALUES(2) LOG ERRORS INTO ERROR_LOG_DMLEL;
   INSERT INTO dummy VALUES(7) LOG ERRORS INTO ERROR_LOG_DMLEL;
   COMMIT;
   EXCEPTION
     WHEN OTHERS THEN
         ROLLBACK;
         dbms_output.put_line('error ocured');
END;
Run Code Online (Sandbox Code Playgroud)

这里,dummy当发生异常时,表的值将回滚到先前的状态,但ERROR_LOG_DMLEL表中记录的错误不会.

回滚对于错误日志不起作用是好的,但为什么它不起作用?

或者他们需要考虑的其他事情是什么?

我经历了几个文档,我找不到任何参考.

如果有人知道原因请回信.

谢谢.

sql oracle plsql

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

PLS-00306:调用'PUT_LINE'时参数的数量或类型错误

这是我第一次尝试编写Oracle过程,并且我收到了一个错误(显示在问题标题中)DBMS_OUTPUT.PUT_LINE.

我在网上看到,它只能回传VARCAHR2列,所以我只投了两个VARCHAR2正在访问的非列,但我仍然得到错误.当我尝试直接在oracle SQL Developer中运行它时,会发生此错误.

CREATE OR REPLACE PROCEDURE LOGGING_PRC 
(
  STARTDATE_IN IN VARCHAR2,
  ENDDATE_IN IN VARCHAR2,
  NAMES_IN IN VARCHAR2, 
  MODS_IN IN VARCHAR2, 
  LOGS_IN IN VARCHAR2,

  ID_OUT OUT VARCHAR2,
  NAME_OUT OUT VARCHAR2,
  MODULE_OUT OUT VARCHAR2,
  ENTRYDATE_OUT OUT VARCHAR2,
  STATUS_OUT OUT VARCHAR2,
  TYPE_OUT OUT VARCHAR2
)  
  AS 
BEGIN
    SELECT
    CAST(ID_LOG AS VARCHAR2(16)),
     APNAME,
     APPMOD,
     CAST(ENTRYDATE AS VARCHAR2(30)),
     APPSTATUS,
     LOGTYPE
  INTO 
      ID_OUT,
      NAME_OUT,
      MODULE_OUT,
      ENTRYDATE_OUT,
      STATUS_OUT,
      TYPE_OUT
   FROM 
     BASE          
   WHERE     
     ENTRYDATE > STARTDATE_IN AND
     ENTRYDATE  < ENDDATE_IN …
Run Code Online (Sandbox Code Playgroud)

oracle plsql oracle12c

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

警告:使用编译错误创建的Package Body

请检查我的包裹和程序.

我的包裹:

create or replace package transaction1 as
    procedure enter_transaction(acc number, kind varchar2, amount number);
    procedure apply_transaction;
end;
/
Run Code Online (Sandbox Code Playgroud)

这是我的身体:

create or replace package body transaction1 as
    procedure enter_transaction(acc in number, kind in varchar2, amount in number) 
    is

    begin

    end;

    procedure apply_transaction
    is

    begin

    end;    
end;
/
Run Code Online (Sandbox Code Playgroud)

什么是警告?为什么?

oracle plsql

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

为什么在这里使用立即执行?

我正在阅读专家 - oracle-database-architecture书.汤姆正在解释关于绑定变量的内容.

你能告诉我第一个程序和第二个程序有什么不同吗?根据我的理解,我们execute immediate用来执行动态SQL语句或匿名PL/SQL块.

这是目标表:

create table t ( x int ); 
Run Code Online (Sandbox Code Playgroud)

以下是过程#1的示例:

ops$tkyte%ORA11GR2> create or replace procedure proc_name1
2 as
3 begin
4   for i in 1 .. 10
5     loop
6       execute immediate
7         'insert into t values ( '||i||')';
8   end loop;
9 end;
10 /
Run Code Online (Sandbox Code Playgroud)

以下是过程#2的示例:

create or replace procedure proc_name2
 as
 begin
   for i in 1 .. 10
   loop
     insert into t values ( i);
   end loop;
 end;
Run Code Online (Sandbox Code Playgroud)

oracle performance plsql dynamic-sql

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

SQL - 选择名称,无论是大写还是小写字母

我尝试用"施密特"选择所有名字.但有些名字是小写的,有些是大写的.

我试试这个:

Select * from Account
where name like '%chmidt%'
or name like '%CHMIDT%'
Run Code Online (Sandbox Code Playgroud)

但是,如果单词中的一个字母是大写字母(例如SchmidT),那么该语句就没有找到.知道有人解决这个问题的简单方法吗?

sql database oracle plsql

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

错误:ORA-01704:字符串文字太长。动态将CLOB分配给变量

我的问题很重要。

我应该执行运行INSERT INTO查询的PL / SQL脚本。看起来像:

DECLARE
newId NUMBER(38,0) := &1;
BEGIN
Insert into FOO ("ID", "DESCRIPTION")
values (newId+1, 'LARGE CLOB WHICH PRODUCES EXCEPTION');
-- A LOT OF INSERT QUERIES
END;
/
exit;
Run Code Online (Sandbox Code Playgroud)

因此,我发现将CLOB分配给VARCHAR2变量是一个好主意,因为它可能是32767字节长。我的目标是针对每个INSERT INTO查询执行此操作。喜欢:

--assign CLOB to VARCHAR2 variable
-- INSERT variable instead of CLOB type
Run Code Online (Sandbox Code Playgroud)

我想指出的是,我INSERT INTO在脚本中有很多查询,因此我应该在每个INSERT INTO查询之前重新分配变量,我该怎么做?

oracle plsql clob

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

在Oracle PL/SQL中打印漂亮

有没有更好的方法在Oracle PL/SQL中打印到STDOUT?

DBMS_OUTPUT.PUT_LINE似乎非常基本和粗糙.应该有类似Python的pprint(Pretty Print)吗?

oracle plsql stdout pretty-print pprint

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

与SYSDATE的日期差异 - 值给出了什么?

当减去今天的日期时,给出正确的输出.

select 
    (TRUNC(to_date('25/05/2016','dd/mm/yyyy'))-TRUNC(to_date('02/01/2016','dd/mm/yyyy')))
from dual;
Run Code Online (Sandbox Code Playgroud)

输出:144天

当今天采取日期时,下面的广告sysdate应该给144.但是显示其他一些值?为什么?

select 
    (to_date(SYSDATE,'dd/mm/yyyy'))-(to_date('02/01/2016','dd/mm/yyyy'))
from dual;
Run Code Online (Sandbox Code Playgroud)

输出:-730343(显示一些值).

sql oracle plsql

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