标签: plsql

仅在 Oracle 中检索周末数据行

如何查询表中的行,其中表中的 created_date 列值仅落在周末日期,即使用 Oracle SQL 的周六/周日。

谢谢

sql oracle plsql oracle10g

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

将数百万条记录从一张表复制到另一张表

如何将一百万张记录从一个表复制到另一张表。如果在复制记录时发生任何错误,我需要将记录(错误记录)复制到其他表。

sql oracle plsql oracle11g plsqldeveloper

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

插入语句中的PL / SQL绑定变量,

VARIABLE dept_id NUMBER

SET AUTOPRINT ON

DECLARE
max_dept departments.department_id%TYPE; 
dept_name departments.department_name%TYPE := 'Revenue';

BEGIN

SELECT MAX(department_id) 
INTO max_dept 
FROM departments; 

:dept_id := max_dept +10;

INSERT INTO departments (department_id,department_name,location_id)
VALUES(:dept_id,dept_name,NULL); 



END;

Run Code Online (Sandbox Code Playgroud)

返回错误

错误报告:ORA-01400:无法将NULL插入(“ HR”。“ DEPARTMENTS”。“ DEPARTMENT_ID”)ORA-06512:在第13行01400。00000-“无法将NULL插入(%s)” *原因:

oracle plsql

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

检查所有无效的表依赖关系并动态重新编译它们

我修改了表的两列,现在有无效的依赖关系,我需要检查所有这些依赖关系并动态重新编译

原来是

CREATE TABLE AHO_CUENTA_AHORRO 
(
    ID_CUENTA NUMBER(8) NOT NULL,
    ID_SOCIO NUMBER(12) NOT NULL,
    ESTADO VARCHAR2(1) NOT NULL,
    TASA_INTERES NUMBER(3,1) NOT NULL,
    FECHA_APERTURA DATE NOT NULL,
    FECHA_CANCEL DATE,
    SALDO_BLOQUEADO NUMBER(12) NOT NULL,
    SALDO_DISPONIBLE NUMBER(12) NOT NULL,

    CONSTRAINT PK_ID_AHORRO PRIMARY KEY (ID_CUENTA)
);

ALTER TABLE AHO_CUENTA_AHORRO 
    ADD CONSTRAINT SOCIO_CUENTA_AHORRO_FK
        FOREIGN KEY (ID_SOCIO)
        REFERENCES SOC_SOCIO (ID_SOCIO);

ALTER TABLE AHO_MOVIMIENTOS_CUENTA 
    ADD CONSTRAINT CUENTA_AHORRO_MOVIMIENTOS
        FOREIGN KEY (ID_CUENTA)
        REFERENCES AHO_CUENTA_AHORRO (ID_CUENTA);
Run Code Online (Sandbox Code Playgroud)

现在我添加了这个

ALTER TABLE AHO_CUENTA_AHORRO
ADD (
SALDO_REAL  NUMBER(12) DEFAULT 0 NOT NULL,
ID_TARIFARIO NUMBER(15) …
Run Code Online (Sandbox Code Playgroud)

sql oracle plsql

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

PL / SQL中的模块化功能

我是PL / SQL的新手,我正在尝试实现模块化功能。

我相信这项工作非常容易,SQL的语言就像python一样,但是,我在使用游标时遇到了麻烦(在我的程序中这似乎是必需的),但是除了使用游标之外,还有什么方法可以做到这一点程序仅使用if / else和循环?(尽管它要求使用游标,但我确实认为没有必要...)

SET SERVEROUTPUT ON

accept p_num1 prompt 'Please enter the number: '

declare
    myint  number(10):= &p_num1;

begin
    if myint is null THEN        
        DBMS_OUTPUT.PUT_LINE(0);
    else
        for i in myint loop
            if mod(i,2) = 0 then
                DBMS_OUTPUT.PUT_LINE('This is even' || i);
            else
                DBMS_OUTPUT.PUT_LINE('This is odd' || i);
            end if;
        end loop;
    end if;

exception
    when others then
        DBMS_OUTPUT.PUT_LINE('You get whatever errors');
end;
/
Run Code Online (Sandbox Code Playgroud)
SET SERVEROUTPUT ON

accept p_num1 prompt 'Please enter the number: '

declare
    myint  number(10):= …
Run Code Online (Sandbox Code Playgroud)

sql oracle plsql

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

sql比oracle中的plsql快吗

使用批量收集或常规合并更新?

我试图通过使用批量收集和正常合并来检查更新的性能。我看到当我们在匿名块中使用简单合并时,性能会更好。使用批量收集时,需要花费更多时间。

如果正常更新(合并)比批量收集快,那么为什么Oracle引入了它?我们在哪里真正看到批量收集的好处?

declare 
l_start integer;
l_end integer;
begin
l_start := dbms_utility.get_time;
merge into test111 t1
using test112 t2
on (t1.col1 = t2.col3)
when matched then update 
set t1.col2 = t1.col2*5;
l_end := dbms_utility.get_time;
dbms_output.put_line(l_end - l_start);
end;
Run Code Online (Sandbox Code Playgroud)
declare
type nt_test is table of test112.col3%TYPE;
nt_val nt_test := nt_test();
cursor c is select col3 from test112;
c_limit integer := 100;
l_start integer;
l_end integer;
begin
l_start := DBMS_UTILITY.get_time;
open c;
loop

fetch c 
bulk collect into nt_val limit c_limit;
exit …
Run Code Online (Sandbox Code Playgroud)

sql plsql bulkinsert oracle11g query-performance

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

在输出参数中包含多个计数来改进存储过程

我有一个存储过程,该过程返回许多OUT参数,这些参数由SELECT COUNT(*)查询结果组成。下面的代码段运行正常,但似乎很慢。

我最多有30个不同的OUT参数,这意味着我要运行30个独立的查询,这可能就是为什么查询运行如此缓慢的原因。

有人对我如何加速此代码有任何建议吗?

PROCEDURE get_counts(
   count1 OUT INT,
   count2 OUT INT,
   count3 OUT INT,
   .. etc.
) IS 
   l_count1 INT;
   l_count2 INT;
   l_count3 INT;
   .. etc.
BEGIN
   SELECT COUNT(*) INTO l_count1 from table1 where condition_blah;
   SELECT COUNT(*) INTO l_count2 from table1 where condition_blah;
   SELECT COUNT(*) INTO l_count3 from table1 where condition_blah;
   ... etc

   count1 := l_count1;
   count2 := l_count2;
   count3 := l_count3;
   .. etc
END get_counts;
Run Code Online (Sandbox Code Playgroud)

sql oracle plsql stored-procedures

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

如何替换表列中的多个空格

我有一个表列,它有像这样的行:

Joe Loe
korea china
Dan  Ger
Run Code Online (Sandbox Code Playgroud)

Dan和Ger之间有两个空格。我想替换在列中包含多个空格的该列值,但是我该怎么做。请帮助我。

SELECT myTable.Columnx
FROM table myTable  
where REGEXP_LIKE(myTable.Columnx, '[[:space:]]*','')
Run Code Online (Sandbox Code Playgroud)

regex sql oracle plsql replace

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

在Oracle中有与TRY_CONVERT()等效的东西吗?

如果转换成功,则T-SQL中的TRY_CONVERT()将返回一个转换为指定数据类型的值;否则它将返回NULL。

ORACLE中是否有类似的功能或重现此行为的方法?

sql oracle plsql

0
推荐指数
2
解决办法
61
查看次数

运行PL / SQL过程后,为什么会出现此错误:“ ORA-00922:缺少或无效的选项”?

我创建了一个具有某些属性的表Patient,例如p_name,p_surname,p_number...。我想创建一个过程以将患者从该表Patient转移到另一个表(Patient_backup),以防他的“ p_number”属性已收到输入,将其从第一个表中删除,仅保留在第二个表中。第二个表具有与第一个表相同的结构。我已经对程序进行了编码。

CREATE TABLE patient (
p_number      VARCHAR2(10) NOT NULL,
p_name            VARCHAR2(15),
p_surname         VARCHAR2(15),
p_street            VARCHAR2(20),
p_city            VARCHAR2(15)
);

CREATE TABLE patient_backup (
p_number      VARCHAR2(10) NOT NULL,
p_name            VARCHAR2(15),
p_surname         VARCHAR2(15),
p_street            VARCHAR2(20),
p_city            VARCHAR2(15)
);

CREATE [OR REPLACE] PROCEDURE transfer (p_number VARCHAR2)
AS
CURSOR k1 IS SELECT p_number FROM patient;
BEGIN
OPEN k1;
LOOP
FETCH k1 INTO p_number;
IF p_number IS NULL THEN
dbms_output.put_line('empty');
ELSE
INSERT INTO patient_backup (SELECT * FROM patient);
Execute Immediate 'Drop Table patient;';
END IF; …
Run Code Online (Sandbox Code Playgroud)

oracle plsql

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