标签: plsql

Oracle PL/SQL:PLS-00306:调用'EMP_PROJECT'时参数的数量或类型错误

创建PLSQL过程,该过程将客户ID作为参数并显示
他/她的预订.每个预订展示厅否,酒店,开始日期和持续时间

create or replace procedure emp_project(CustID NUMBER)
is 
cursor ecur
is
select r.RoomNo, r.HotelName, StartDate, Duration
from Room r, Booking b
where r.RoomNo=b.RoomNo
and r.RoomNo = b.CustID;
begin
for erec in ecur loop
dbms_output.put_line(erec. RoomNo ||' '||erec. HotelName ||' '|| erec. Duration);
end loop;
end;
/
Run Code Online (Sandbox Code Playgroud)

有人可以解释我的参数有什么问题吗?我运行时遇到此错误:

SQL> exec emp_project
BEGIN emp_project; END;

     *ERROR at line 1:
    ORA-06550: line 1, column 7:
    PLS-00306: wrong number or types of arguments in call to 'EMP_PROJECT'
    ORA-06550: line 1, column 7:
    PL/SQL: …
Run Code Online (Sandbox Code Playgroud)

oracle plsql sqlplus

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

oracle执行立即不执行

我是Oracle(11gr2)的新手,我有以下脚本:

BEGIN
    DECLARE 
        source varchar2(1);

    BEGIN
        dbms_output.enable;


        BEGIN
            EXECUTE IMMEDIATE 'DROP VIEW SP_AD;';
            SELECT SOURCE INTO source FROM map_switch WHERE ROWNUM = 1;
            IF source = 'A' 
                THEN 
                    EXECUTE IMMEDIATE 'DROP TABLE SP_AD_B;';
                    EXECUTE IMMEDIATE 'RENAME TABLE SP_AD_A TO SP_AD;';
                ELSE 
                    EXECUTE IMMEDIATE 'DROP TABLE SP_AD_A;';
                    EXECUTE IMMEDIATE 'RENAME TABLE SP_AD_B TO SP_AD;';
            END IF;
            COMMIT WORK;
                    dbms_output.put_line('SP_AD table issue fixed');
            EXCEPTION
                WHEN OTHERS THEN
                    dbms_output.put_line('Exception, rolling back transaction, SP_AD not resolved.');
                    ROLLBACK WORK;
        END;        
    END;
END;
/
Run Code Online (Sandbox Code Playgroud)

基本上,它确定要删除哪个表,然后删除视图并重命名另一个表.

如果我单独运行语句,它可以很好地工作,但在上面的脚本中,它返回成功执行的过程但没有执行任何操作. …

plsql oracle11g

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

我该如何编译PLSQL包

如何在sql提示符下编译oracle包并使用toad?我用谷歌搜索,我只得到重新编译的答案,找不到任何编译方式.

toad plsql

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

Oracle pl/sql查询向数字添加空格,使其右对齐

我有一个查询返回一个数字(16,2)数据类型的价格.

所以查询SELECT PRICE FROM PRODUCT;

它应该回来

   10.00
 1234.00     --> values are right aligned; space needs to be added to 10.00 
                 to align it with 1234.00
Run Code Online (Sandbox Code Playgroud)

要对齐多少空格是动态的我们知道数据类型的长度是(14,2),所以我想将数字转换为char并在数字的左边添加空格.

  SELECT LPAD(p.price , (17 - LENGTH(TO_CHAR(p.price))),' ')  FROM Product.
Run Code Online (Sandbox Code Playgroud)

我尝试了上面的查询,但它没有给我正确的结果.

我只是想知道它有什么问题

sql oracle plsql oracle11g

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

即使对于IN列表中的表中不存在的元素,也返回结果

我试图找到返回结果集的最简单方法,该结果集指示表中是否存在某些值.考虑一下这个表:

id 
------
  1
  2
  3
  7
  23

我将收到一个ID列表,我需要回复相同的列表,指出表中存在哪些.如果我得到的列表如下:'1','2','3','4','8','23',我需要生成一个如下所示的结果集:

id  |  status
-------------
  1 | present
  2 | present
  3 | present
  4 | missing
  8 | missing
 23 | present

到目前为止,我已经设法使用以下方法UNPIVOT:

select id, 'present' as status
from my_table
where id in ('1','2','3')
union
select subq.v as id, 'missing' as status
from (
        select v
        from
        (
          (
            select '1' v1, '2' v2, '3' v3 from dual
          )
          unpivot
          (
            v
            for x in (v1,v2,v3)
          ) …
Run Code Online (Sandbox Code Playgroud)

sql oracle plsql

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

PL/SQL新手:SELECT和SYSDATE的函数

我是SQL的新手,希望能帮助我们将其变成一个函数:

SELECT 
SYSDATE "Today's Date",
NEXT_DAY(trunc(SYSDATE, 'MONTH')-1, 'Tuesday')"First Tuesday this Month",
NEXT_DAY (LAST_DAY(SYSDATE)+1,'TUESDAY') "First Tuesday of Next Month"
FROM DUAL;
Run Code Online (Sandbox Code Playgroud)

这是我尝试将上述内容转换为函数(因为你可以看到它没有那么热)...

CREATE OR REPLACE FUNCTION first_tuesday
RETURN DATE
AS
  date1 DATE;
  date2 DATE;
  date3 DATE;

BEGIN

  date1 := SELECT SYSDATE;
  date2 := SELECT NEXT_DAY(trunc(SYSDATE, 'MONTH')-1, 'Tuesday');
  date3 := SELECT NEXT_DAY (LAST_DAY(SYSDATE)+1,'TUESDAY');

RETURN 'todays date:' || date1, 
'first tuesday this month:' || date2,
'first tuesday next month:' || date3;

END;
/
SELECT first_tuesday FROM DUAL;
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

sql oracle plsql

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

UTL_SMTP.quit的-4091的raise_application_error超出范围

我收到ORA-21000:-4091的raise_application_error的错误号参数超出了UTL_SMTP.quit(连接)的范围;

我在程序中有SMTP相关代码.所以当我运行下面的程序时它工作正常.但是当我从我的应用程序中的触发器调用Send_Mail时,它会抛出上述错误.

BEGIN
   Send_Mail (p_to             => 'temp@temp.com',
              p_from           => 'temp@temp.com',
              p_message        => 'Test message',
              p_smtp_host      => 'tempserver'
             );
END;
/
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助.

plsql oracle11g

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

警告:在oracle中使用编译错误创建的过程

创建表:

create table customer (Name varchar2(10), Address varchar(40), Contact number);
Run Code Online (Sandbox Code Playgroud)

INSERT的创建过程:

CREATE OR REPLACE PROCEDURE SP_CUSTOMER (
p_name customer.Name%TYPE,
p_address customer.Address%TYPE,
p_contact customer.Contact%TYPE)
IS
BEGIN
INSERT INTO customer ("Name", "Address", "Contact")
VALUES (p_name, p_address, p_contact);
COMMIT;
END;
/
Run Code Online (Sandbox Code Playgroud)

错误:IT显示:警告:使用编译错误创建的过程.

CREATE PROCEDURE FOR SELECT:

CREATE OR REPLACE PROCEDURE SP_SELECT_CUSTOMER (
p_name customer.Name%TYPE,
p_address customer.Address%TYPE,
p_contact customer.Contact%TYPE)
IS
BEGIN
SELECT Name, Address, Contact FROM customer;
END;
/
Run Code Online (Sandbox Code Playgroud)

错误:IT显示:警告:使用编译错误创建的过程.

问题是什么.?怎么解决呢.

oracle plsql stored-procedures oracle10g

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

表或视图不存在

您好,以下是我的代码.我需要使用视图中的数据创建一个视图并在另一个游标中获取数据.但是当我执行我的代码时,我收到错误

"ORA-06550:第56行,第37列:PL/SQL:ORA-00942:表或视图不存在ORA-06550:第52行,第9列:PL/SQL:忽略SQL语句"

这是什么问题?提前致谢.

declare

drop_view_sql varchar2(100) := 'drop view rv_task_number_view';

type tasks_rec is record(task_number varchar2(20));

type t_tab is table of  tasks_rec;

tasks_tab t_tab;

notes_rec xx_fs_mob_loc_rec.task_notes_rec;

notes_tab xx_fs_mob_loc_rec.task_notes_tab;

    begin

        execute immediate 'create view apps.rv_task_number_view  as
                          SELECT distinct ct.task_number                  
                          FROM csf_ct_tasks ct ,

                            cs_estimate_details ced,
                            csf_debrief_headers cdh,
                            csf_debrief_lines   cdl,
                            jtf_task_assignments jta  

                   WHERE    1=1
                   and      jta.task_id = ct.task_id
                   and      jta.task_assignment_id = cdh.task_assignment_id(+)
                   and      cdh.debrief_header_id = cdl.debrief_header_id(+)
                   and      cdl.debrief_line_id = ced.source_id(+)
                   AND      ((ct.planned_end_date between (sysdate-30) and (sysdate+30)) or (ct.scheduled_end_date between (sysdate-30) and (sysdate+30)))
                   and …
Run Code Online (Sandbox Code Playgroud)

oracle plsql execute execute-immediate

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

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
查看次数