DDL和DML是用于与数据库交互的两种严格的语句类型.我不确定为什么这种分类存在.
对于DDL和DML语句,Oracle数据库在内部的工作方式是否存在根本区别?
我有一个存储过程,它返回一个游标.
应用程序将一个参数传递给过程,该过程确定应该获取多少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倍多,周末愉快;)
我为一个简单的视图创建了一个"而不是"触发器,该视图只对表上的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
如何线性化嵌套表,嵌套表本身也包含嵌套表(注意:内部表可能具有不同的大小).假设我有以下类型声明:
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) 这是程序,
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 …
伙计们可以将表名从一个游标传递给另一个游标.请允许我反过来.
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)
是否有另一种方法将表传递给游标.
我有package.pkg和package.pkg文件,如何在不使用Pl/SQL Developer的情况下安装和运行它?无论如何还是我必须安装Pl/SQL Developer?
如何使以下包装选择所有列"*"而不是只是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) 我有一个PLsql表empnos Sys.odcinumberlist.该表中有许多条目.现在在同一个程序中我想从这个表中选择使用
从表中选择x(empnos).现在,在这种情况下x是什么.我尝试过价值,价值等等但无济于事.
谢谢
我试图更新没有唯一索引的表中的行.所以,我选择了要更新的行的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]
知道为什么吗?