标签: plsql

数据库实现DDL和DML的方式有何不同?

DDL和DML是用于与数据库交互的两种严格的语句类型.我不确定为什么这种分类存在.

对于DDL和DML语句,Oracle数据库在内部的工作方式是否存在根本区别?

sql database oracle database-design plsql

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

Oracle Pl/sql从多个查询中返回一个游标

我有一个存储过程,它返回一个游标.

应用程序将一个参数传递给过程,该过程确定应该获取多少ID,因此该过程不知道该数字的时间序列.

foreach ID我需要获取具有该ID的前3个记录.我试过的是使用:

select * from table_name where id in (List of ID`s);
Run Code Online (Sandbox Code Playgroud)

该查询有效,但我无法获得每个ID的前3个.如果我限制结果计数,我将得到第一个ID的TOP结果.

我想使用For循环,为每个ID执行查询并将结果附加到光标,但据我所知,这是不可能的.

有任何想法吗 ?

更多细节 假设我有5个ID,s and each of them have inner Id所以Id 1有(1,2,3,4,5)Id 2(1,2,3,4,5)Id 3(12,14,15,16,22) Id 4(2,3,5,7,9)Id 5(4,7,8,9,10)在这种情况下,我正在处理的情况,我不知道行号将如何帮助我.我需要每个ID的前3个,在这种情况下,光标应该有15个结果.

10倍多,周末愉快;)

sql oracle plsql

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

为视图创建"代替"触发器时编译错误

我为一个简单的视图创建了一个"而不是"触发器,该视图只对表上的select*和不执行任何操作的触发器(我想最小化问题):

create or replace view tmp(id, nazwa, nip, adres, zalega, punkty) as
select * from klient

create or replace trigger tmp_trg
instead of insert
on tmp
for each row
begin

end;
Run Code Online (Sandbox Code Playgroud)

视图已创建.然后,当我想要声明此触发器时,sql developer返回错误:

错误(8,1):PLS-00103:当遇到以下情况之一时遇到符号"END":如果循环mod为空pragma raise返回选择更新,则使用'一个标识符''双引号开始情况声明退出goto delimited-identifier''绑定变量'<< close current delete fetch lock insert open rollback savepoint set sql execute commit forall merge pipe

oracle plsql

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

线性化Oracle嵌套表

如何线性化嵌套表,嵌套表本身也包含嵌套表(注意:内部表可能具有不同的大小).假设我有以下类型声明:

CREATE OR REPLACE TYPE VECTOR
IS
  TABLE OF NUMBER;

CREATE OR REPLACE TYPE TABLE_OF_VECTOR
IS
  TABLE OF VECTOR;
Run Code Online (Sandbox Code Playgroud)

以下PL/SQL片段:

DECLARE
  number_table TABLE_OF_VECTOR;
  result_vector VECTOR;
BEGIN
  number_table := table_of_vector(vector(23, 4, 2222, 22222222),
    vector(2, 1, 766, 2), vector(2, 1, 5));
END;
Run Code Online (Sandbox Code Playgroud)

有没有办法我可以线性化number_table并将其在result_vector中的所有值存储为一个连续的数字列表?我想最终得到:

result_vector == vector(23, 4, 2222, 22222222, 2, 1, 766, 2, 2, 1, 5)
Run Code Online (Sandbox Code Playgroud)

sql oracle plsql oracle11g

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

Oracle游标未按预期工作

这是程序,

CREATE OR REPLACE PROCEDURE provsnXmlCmprsn (
            encyNo SAS_PRO_CTL.AGENCYNO%TYPE, period SAS_PRO_CTL.PERIODE%TYPE) IS

xmlContent SAS_PRO_XML.XMLCONTENT%TYPE;
sasProvisionId SAS_PRO_CTL.SASPROVISIONID%TYPE;

CURSOR crsrXml IS
SELECT XMLCONTENT, c.SASPROVISIONID FROM SAS_PRO_XML x, SAS_PRO_CTL c
  WHERE x.SASPROVISIONID = c.SASPROVISIONID AND c.PERIODE = period 
                                    AND c.AGENCYNO = agencyNo ORDER BY XMLLINENO;

BEGIN
DBMS_OUTPUT.put_line('Params: ' || agencyNo || ', ' || period);

OPEN crsrXml;
LOOP
  FETCH crsrXml INTO xmlContent, sasProvisionId;
  EXIT WHEN crsrXml%NOTFOUND;
    DBMS_OUTPUT.put_line('XML Content Length: ' || LENGTH(xmlContent));
END LOOP;
CLOSE crsrXml;

END provsnXmlCmprsn;
Run Code Online (Sandbox Code Playgroud)

cursor根据条件和参数值,查询中的查询是5行,而预期是1行.当独立运行时,相同的查询会产生1行.令人惊讶的是,cursor无论条件是否c.PERIODE …

oracle plsql stored-procedures cursor oracle10g

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

将tablename传递给游标

伙计们可以将表名从一个游标传递给另一个游标.请允许我反过来.

CURSOR  R IS SELECT TABLE_NAME FROM RESOURCE ;


CURSOR S(TAB VARCHAR2) IS SELECT  username from TAB where sid=1291;
Run Code Online (Sandbox Code Playgroud)

是否有另一种方法将表传递给游标.

oracle plsql

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

安装和运行Pl/SQL包

我有package.pkg和package.pkg文件,如何在不使用Pl/SQL Developer的情况下安装和运行它?无论如何还是我必须安装Pl/SQL Developer?

oracle plsql packages

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

PL SQL如何选择所有列

如何使以下包装选择所有列"*"而不是只是if_type,和number_infected?

--spec
create or replace package WrapperSample is

  type TResultRow is record(
     if_type         codes.cd%type
    ,number_infected Integer);

  type TResultRowList is table of TResultRow;

  function GetADedIcWarningsProv
  (
    p_hos_id in work_entity_data.hos_id%type
   ,p_date   in date
  ) return TResultRowList
    pipelined;

end WrapperSample;
/

--body
create or replace package body WrapperSample is

  function GetADedIcWarningsProv
  (
    p_hos_id in work_entity_data.hos_id%type
   ,p_date   in date
  ) return TResultRowList
    pipelined is
    v_refcur   eOdatatypes_package.eOrefcur;
    currentRow TResultRow;
  begin
    v_refcur := YourSchema.getADedIcWarningsProv(p_hos_id, p_date);

    loop
      fetch v_refcur
        INTO currentRow;
      exit when …
Run Code Online (Sandbox Code Playgroud)

sql database oracle plsql

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

oracle从PLSQL中的内存表中选择

我有一个PLsql表empnos Sys.odcinumberlist.该表中有许多条目.现在在同一个程序中我想从这个表中选择使用

从表中选择x(empnos).现在,在这种情况下x是什么.我尝试过价值,价值等等但无济于事.

谢谢

oracle plsql

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

PL/SQL:基于ROWID更新行

我试图更新没有唯一索引的表中的行.所以,我选择了要更新的行的ROWID,现在我想更新这样的行:

UPDATE MYTABLE SET MYCOLUMN = 0 WHERE ROWID = "AAAIWWAAFAAApwDADR"
Run Code Online (Sandbox Code Playgroud)

MYCOLUMN的类型为NUMBER(1)

我收到错误: invalid identifier [SQL State=42000, DB Errorcode=904]

知道为什么吗?

oracle plsql rowid

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