标签: plsql

是否可以将表名作为参数传递给Oracle?

我想创建一个这样的存储过程:

PROCEDURE P_CUSTOMER_UPDATE
  (
      pADSLTable IN Table,
      pAccountname IN NVARCHAR2,
      pStatus IN NUMBER,
      pNote IN NVARCHAR2,
      pEmail IN NVARCHAR2,
      pMobi IN NVARCHAR2,
      pServiceTypeID IN NUMBER,
      pDate IN DATE
  )
  IS
  BEGIN
      UPDATE pADSLTable
      SET STATUS = pStatus, NOTE = pNote, EMAIL = pEmail, MOBI = pMobi, SERVICETYPE_ID = pServiceTypeID, ACTIVATION_DATE = pDate
      WHERE ACCOUNT_NAME = pAccountname;
  END;
Run Code Online (Sandbox Code Playgroud)

当然,Oracle不允许我这样做.有办法解决这个问题吗?非常感谢你.

sql oracle plsql stored-procedures

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

如何计算表中列的每个值?

我有这样一张桌子:

UserID     Customer ID status        
1               1          1
1               2          1 
1               3          1
1               4          2
1               5          1
1               6          3
1               7          2
2               8          1
2               9          2 
 ........
Run Code Online (Sandbox Code Playgroud)

我想总结一下这个表,对此:

 UserID           count(status 1)    count(status 2)   count(status 3)
    1                4                2                     1 
    2                1                2                     3
   .........
Run Code Online (Sandbox Code Playgroud)

我怎么能在PL/SQL中做到这一点?

预先感谢

sql database oracle plsql

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

oracle中的并行处理

我有一个'过程A',它必须将一个空光标返回到前端,然后立即继续下一步,它将调用一个过程,该过程将花费20分钟来完成过程.

Procedure A(cur_out refcursor)
begin

 OPEN cur_out  for
 select 
 null empname,
 null empid
 from dual;

procedure B();//Will take 20 min

end;
Run Code Online (Sandbox Code Playgroud)

这里'Procedure A'应返回null游标而不等待'Procedure B'完成.

如何在oracle中实现这一点.

提前致谢.

sql oracle parallel-processing plsql

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

Oracle BULK FETCH和FORALL插入的性能问题

我试图尽快将记录从一个表复制到另一个表.

目前我有一个类似于此的简单光标循环:

FOR rec IN source_cursor LOOP
   INSERT INTO destination (a, b) VALUES (rec.a, rec.b)
END LOOP;
Run Code Online (Sandbox Code Playgroud)

我想加快它的速度,所以我正在尝试一些BULK操作(BULK FETCH,然后是FORALL插入):

这是我对批量选择/ forall插入的内容.

DECLARE 
  TYPE t__event_rows IS TABLE OF _event%ROWTYPE;
  v__event_rows t__event_rows;

  CURSOR c__events IS
    SELECT * FROM _EVENT ORDER BY MESSAGE_ID;
BEGIN
  OPEN c__events;
  LOOP
    FETCH c__events BULK COLLECT INTO v__event_rows LIMIT 10000;  -- limit to 10k to avoid out of memory

    EXIT WHEN c__events%NOTFOUND;

    FORALL i IN 1..v__event_rows.COUNT SAVE EXCEPTIONS
      INSERT INTO destinatoin
        ( col1, col2, a_sequence) 
        VALUES 
        (  v__event_rows(i).col1, …
Run Code Online (Sandbox Code Playgroud)

oracle plsql bulkinsert query-optimization

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

带序列的SQL(加)性能

我必须从某些表中生成一些百万更新,以更新自己.我最近刚刚了解到parallel(tablename,threads),当我运行这样的东西时,PLIS开发人员的性能真正得到了改善:

select /* + parallel(table1,100) parallel(table2,100) */
       'update table1 set id = 1 where ... and id = '||table1.id||' ...
where ...
Run Code Online (Sandbox Code Playgroud)

(我这样做,因为它在更新时给了我备份数据.我的BOSS告诉我这样做;-))

因此,当在set id = 1部件和PLSQL Developer中使用静态数字时,它确实很快.

但后来我把它写到一个文件中,然后插入一个create sequence,并尝试使用如下序列:

create sequence myseq
 start with   4200000
 increment by 1
 maxvalue     11200000;


select /* + parallel(table1,100) parallel(table2,100) */
       'update table1 set id = '||myseq.nextval||' where ... and id = '||table1.id||' ...
where ...
Run Code Online (Sandbox Code Playgroud)

但现在它非常缓慢.我不知道为什么.我只是重新编写了update生成器,在那里插入静态数据,然后用awk一系列数字替换它,但是有人可以解释导致这种情况的原因(我可以对它做些什么)吗?

提前致谢!

oracle performance plsql code-generation sequence

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

避免在数据库中重复标识符

注意:请回答所有的答案,谢谢,但我们已经有一个序列..并且不能使用UNIQUE约束,因为有些项目需要重复...我需要以某种方式使用PLSQL处理这个,所以基于一些标准(使用一个如果声明)我需要确保没有重复的东西..而且只是为了确认,这些标识符是非常自定义的不同类型的字符串..并且对于每组字符串,我们有一个数字仅仅为该字符串计数(STR-STR - ####)我们有数百种这样的STR-STR组合,对于每种组合,我们都有一个####,它们可以计算......除此之外,还允许一些STR-STR组合有重复..所以我们不能使用UNIQUE CONTRAINTS,我们不能使用PRIMARY KEY,因为它不是一个简单的数字,最重要的是我们确实有一个PRIMARY KEY分配给每个项目..这些标识符适用于用户,而不适用于数据库管理.

当用户创建一个项目时,基于某个creteria,我们给项目一定数量..在保存功能中,调用一个函数来准备第一个初始字符串,然后扫描保存数字的表格并且分配该特定字符串的下一个可用4位数字.

现在有一些问题,在获取下一个数字和提交数据库之间有大约1000行代码.问题是当2个人在几秒钟内创建具有相同标准的项目时,有时会发出相同的数字.

我所做的就是在提交之前,我检查数据库中的数字,如果存在,我调用该函数再次获取下一个可用数字...

即使这段代码减少了重复的可能性,如果我同时保存2个项目,我仍然会得到一个重复的数字..

任何人都知道如何避免重复并将重复数字的机会降至0?

EDIT1:我们已经有了一个主键..这个标识符是一个特殊的字符串,并且非常自定义,因此不可能只使用从0开始计数的数字

编辑2:还有一些情况我们需要重复..这是非常小的(可能大约10个不同的项目轨道使用重复)所以在我使用if语句提交之前检查重复项之前,所以如果项目保存dosn' t属于应该有重复的系统之一,我跳过检查...

编辑3:我们在这里使用PL/SQL

编辑4:我猜这个问题是非常具体的,我没有完全传达它.虽然有很多答案,但没有人真的抓住了我的问题..无论如何,我解决了问题并在下面添加了我的答案..

sql oracle plsql duplicates no-duplicates

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

执行即时问题

我试图使用Execute Immediate在下面运行此代码,但它不起作用,值是正确的.

请提供正确的代码.

declare
v_count number:=1;
v_conc_name varchar2(400);
v_val VARCHAR2(20):='vineet';
BEGIN 
v_conc_name:='INT_AP_PAY_CONV';
EXECUTE IMMEDIATE 'UPDATE xxx_cnc_prg_details
               SET
               PARAMETER'||v_count||'='
               ||v_val||' where CONCURRENT_PROGRAM_SHORT_NAME= '||v_conc_name;

end;  
Run Code Online (Sandbox Code Playgroud)

oracle plsql plsqldeveloper

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

在包中插入INTO + COMMIT

为记录持久性编写oracle包的最佳解决方案是什么?我总是写这样的东西:

    create or replace
    PACKAGE BODY           "USP_PRICELIST" AS

      PROCEDURE  usp_TABLE1Save 
        (
        pErrorCode              OUT NUMBER,
        pMessage                OUT VARCHAR2,       
        pPARAM1                 IN CHAR,
        pPARAM2             IN CHAR
        )

        IS

    BEGIN

        pErrorCode := 0;

        INSERT INTO TABLE1
          (PARAM1, PARAM2)
        VALUES
          (pPARAM1, pPARAM2);
        EXCEPTION
                 WHEN OTHERS THEN pErrorCode := SQLCODE; pMessage := SQLERRM;

    END usp_TABLE1Save;

END USP_PRICELIST;
Run Code Online (Sandbox Code Playgroud)

我想知道是否必须在INSERT INTO之后进行COMMIT.

阿尔贝托

oracle plsql

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

oracle中的数据库基本链接是否应在完成使用后删除/关闭?

我有一个SQL脚本使用"创建数据库链接"连接到另一个数据库,并复制一些数据.

在使用完毕后,是否应删除或关闭此数据库基本链接?(说,假设我可能不会再需要它).

什么是最佳做法?

我听到我的团队有一些相互矛盾的答案.

如果我要关闭它,我如何确保在我打电话时关闭链接:

drop database link somelink;
Run Code Online (Sandbox Code Playgroud)

(我得到错误抱怨我打开了连接,这很奇怪,因为我没有执行任何异步操作/作业).

sql oracle plsql database-link

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

调整Oracle SQL语句

对于SQL调优的新手,人们可以提供指针和信息性的URL,这些URL可以帮助我如何处理SQL查询以及在必要时定义索引,当涉及调整大量数据表的SQL查询时数据超过50,000行?

为了加速SQL语句,我应该注意哪些主要内容?

sql oracle performance plsql oracle10g

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