以下查询给出了缺少的关键字错误..
select *
from its_account aac
CROSS APPLY its.fnGetAccountIdentifier(aac.account_key) ;
Run Code Online (Sandbox Code Playgroud)
这是我的功能:
create or replace FUNCTION fnGetAccountIdentifier
(
v_AccountKey IN NUMBER
)
RETURN fnGetAccountIdentifier_pkg.tt_fnGetAccountIdentifier_type PIPELINED
AS
v_temp SYS_REFCURSOR;
v_temp_1 TT_FNGETACCOUNTIDENTIFIER%ROWTYPE;
BEGIN
OPEN v_temp FOR
SELECT *
FROM tt_fnGetAccountIdentifier;
LOOP
FETCH v_temp INTO v_temp_1;
EXIT WHEN v_temp%NOTFOUND;
PIPE ROW ( v_temp_1 );
END LOOP;
END;
Run Code Online (Sandbox Code Playgroud)
我不知道我在哪里做错了.我真的很陌生.
我正在使用一个我没有编写的存储过程,它很长并且包含许多列和连接.该过程返回一个游标,应用程序服务器(.NET,顺便提一下)接收并迭代.
我正在尝试使用SQLPlus和PL/SQL拦截游标,但我很难弄清楚如何设置脚本.这是我到目前为止所拥有的:
DECLARE
cur sys_refcursor;
BEGIN
adv_schema.report_proc('CAL','01-JAN-2011','01-JAN-2012','Y',cur);
OPEN cur FOR --??????
LOOP
FETCH cur INTO column1, column2;
EXIT WHEN cur%NOTFOUND;
DBMS_OUTPUT.Put_Line ('First Name: '||column1||' Last Name: '||column2);
END LOOP;
END;
/
Run Code Online (Sandbox Code Playgroud)
我在OPEN声明中加入了什么?我所见过的关于如何执行此操作的所有示例都是过于简化的示例,其中在PL/SQL块中创建了一些表't',然后打开了一个带有查询到该表的游标,以进行循环.过程何时将游标返回到具有多个表的复杂查询?
我有一些记录像
a,b
b,a
a,c
c,a
b,d
d,b
b,f
f,b
...
Run Code Online (Sandbox Code Playgroud)
在我的查询结果中.(他们是电子邮件)最好的方法是什么:
a,b
a,c
b,d
b,f
Run Code Online (Sandbox Code Playgroud)
并消除b,a和c,a,d,b,f,b?
我试过了
SELECT *
FROM ...
WHERE MOD(ROWNUM/2)=0
Run Code Online (Sandbox Code Playgroud)
但它只返回第一行
我试图找到2个日期之间的日期.我尝试运行以下查询,最终导致ORA-30076错误.
查询是,
select extract(day from (sysdate - to_date('2009-10-01', 'yyyy-mm-dd')))
from dual
Run Code Online (Sandbox Code Playgroud)
错误是,
Error at Command Line:1 Column:34
Error report:
SQL Error: ORA-30076: invalid extract field for extract source
30076. 00000 - "invalid extract field for extract source"
*Cause: The extract source does not contain the specified extract field.
Run Code Online (Sandbox Code Playgroud)
但是,当我试图跑
Select extract(day from sysdate) from dual;
Run Code Online (Sandbox Code Playgroud)
我得到了正确的输出.
请帮助,如果有人知道为什么我得到上述错误的原因.
首先,我使用jdbc驱动程序在java中运行所有这些...
在这里我定义一个表:
create table HistoryCCP(
ID NUMBER(6) NOT NULL,
SCRIPT VARCHAR2(1000) NOT NULL
)
Run Code Online (Sandbox Code Playgroud)
在这里我定义一个序列:
CREATE SEQUENCE SYSTEM.HistoryId
MINVALUE 1
MAXVALUE 1000000
INCREMENT BY 1
START WITH 1
NOORDER
NOCYCLE
Run Code Online (Sandbox Code Playgroud)
现在我在这里使用这个插入表:
insert into HistoryCCP
values (SYSTEM.HistoryId.nextval ,'HELLOOOO ')
Run Code Online (Sandbox Code Playgroud)
每当我关闭程序并再次运行并尝试插入时,它会将其递增10!当我定义这样的序列时:
CREATE SEQUENCE SYSTEM.HistoryId
MINVALUE 1
MAXVALUE 1000000
INCREMENT BY 1
START WITH 1
CACHE 100 -- added cache parameter
NOORDER
NOCYCLE
Run Code Online (Sandbox Code Playgroud)
它增加了100!你知道它为什么会这样,以及如何将它增加1?
这是我的串行表:
+-----------------+-----------------+
| START_SERIAL | END_SERIAL |
+-----------------+-----------------+
| 120500216057150 | 120500216057155 |
| 120500216057157 | 120500216057157 |
| 120500216057161 | 120500216057164 |
+-----------------+-----------------+
Run Code Online (Sandbox Code Playgroud)
需要得到这样的结果:
120500216057150
120500216057151
120500216057152
120500216057153
120500216057154
120500216057155
120500216057157
120500216057161....
Run Code Online (Sandbox Code Playgroud)
请帮我解决这个问题.[似乎需要带有for循环的pl-sql.?]
编辑 亲爱的TechDo,如下pl/sql用法如下.但它给了我一个错误:-)
DECLARE
start_serial NUMBER;
end_serial NUMBER;
records NUMBER;
BEGIN
select start_serial INTO start_serial
from sales_details ;
select (start_serial+no_of_cards)as end_serial into end_serial
from sales_details;
select count(*) as records into records
from sales_details;
FOR i IN 1..records LOOP
INSERT INTO temp (serial_no)
VALUES(i);
END LOOP;
END;
/
Run Code Online (Sandbox Code Playgroud) 表名: T_record
Id(auto increment using sequence) Name Age
1 Chitta 18
2 Chitta1 19
3 Chitta2 18
4 Chitta3 18
Run Code Online (Sandbox Code Playgroud)
我有PL/SQL程序,它将在上表中插入记录.
Insert into T_record (name, Age)
(select name, age
from T_record
where Age =18)
returning id bulk collect into v_newly_added_conf_input_ids;
Run Code Online (Sandbox Code Playgroud)
但批量收集不起作用.
我怎样才能知道id新插入的s(我希望它id在其他选择查询中使用相同的s)?
我可以投出B1 char(2)哪些联接A1 varchar2(2):
SELECT * FROM A
LEFT JOIN B
ON CAST(B.B1 AS VARCHAR2(2)) = A.A1
Run Code Online (Sandbox Code Playgroud)
结果没有错误,但没有显示数据.
以上查询可能吗?
我有一个表包含两种类型的信息,一种叫做Number_Of_Calls,另一种叫做Number_Of_Answered.
现在,在我的应用我想获得多少百分比Number_of_answered是的Number_of_calls,我想通了数据库中计算会做到这一点的最好办法.
但是我不知道如何在SQL中计算
到目前为止,我有:
Select Number_Of_Calls,
Number_of_answered
from table
Where Date BETWEEN '2012-09-10' AND '2012-09-11'
Run Code Online (Sandbox Code Playgroud) 我正在PL/SQL中创建一个表,但我希望我的char列只能被允许r或者d.我一直在环顾四周,但没有在网上找到具体的答案.也许我只是没有使用正确的搜索词.
我有一个varchar栏,我想转换yyyy-mm-dd hh:mi:ss成mm-dd-yyyy hh:mi:ss扔在一个日期.怎么做到呢?
create or replace procedure nearprice
is
userprice products.price%type := 4.23;
closest products.price%type;
temp products.price%type;
tempid products.pid%type;
cursor procur is
select * from products;
prorec procur%rowtype;
begin
open procur;
fetch procur into prorec;
closest := abs(prorec.price - userprice);
tempid := prorec.pid;
while procur%found then
loop
fetch procur into prorec;
temp := abs(prorec.price - userprice);
if temp < closest then
closest := temp;
tempid = prorec.pid;
end if;
end loop;
close procur;
select *
from products
where pid = tempid;
end;
Run Code Online (Sandbox Code Playgroud)
我想检索 …