小编Nic*_*nov的帖子

交叉申请提供缺少关键字错误

以下查询给出了缺少的关键字错误..

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)

我不知道我在哪里做错了.我真的很陌生.

oracle plsql cross-apply

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

循环从具有许多表的过程返回的游标

我正在使用一个我没有编写的存储过程,它很长并且包含许多列和连接.该过程返回一个游标,应用程序服务器(.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',然后打开了一个带有查询到该表的游标,以进行循环.过程何时将游标返回到具有多个表的复杂查询?

sql oracle stored-procedures

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

消除半复制的最佳方法!Oracle中的记录

我有一些记录像

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)

但它只返回第一行

sql oracle

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

ORA-30076试图找到日期之间的天数

我试图找到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)

我得到了正确的输出.

请帮助,如果有人知道为什么我得到上述错误的原因.

sql oracle

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

如何仅将序列增加1?

首先,我使用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?

sql oracle oracle11g

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

Oracle获得范围数字

这是我的串行表:

+-----------------+-----------------+
|  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)

sql oracle plsql

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

Oracle:使用select插入不返回批量收集新插入的ID

表名: 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)?

oracle plsql plsqldeveloper

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

是可能的:在oracle中连接表时将char转换为varchar

我可以投出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)

结果没有错误,但没有显示数据.

以上查询可能吗?

oracle casting join

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

计算SQL中的百分比

我有一个表包含两种类型的信息,一种叫做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)

java mysql sql oracle

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

在Oracle中将Char限制为两个值

我正在PL/SQL中创建一个表,但我希望我的char列只能被允许r或者d.我一直在环顾四周,但没有在网上找到具体的答案.也许我只是没有使用正确的搜索词.

database oracle plsql

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

如何将yyyy-mm-dd hh:mi:ss转换为mm-dd-yyyy hh:mi:ss in Oracle?

我有一个varchar栏,我想转换yyyy-mm-dd hh:mi:ssmm-dd-yyyy hh:mi:ss扔在一个日期.怎么做到呢?

oracle datetime date varchar2 oracle-sqldeveloper

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

Oracle PL/SQL,我想检索价格最接近4.23的产品的详细信息

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)

我想检索 …

sql oracle plsql

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

从M20161到Jan16的日期转换

如何在Oracle中转换M20161为年份和月份.Jan-1620161

oracle date

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