标签: plsql

Oracle查询 - 存储过程

我正在运行存储过程:

CREATE OR REPLACE MYSP (runDate Date)
BEGIN 
EXECUTE IMMEDIATE 'CREATE TABLE MYTABLE AS (SELECT * FROM DATATABLE WHERE DATADATE = :1' USING runDate); 

END MYSP;
Run Code Online (Sandbox Code Playgroud)

我收到错误 -

ORA-01027: bind variables not allowed for data definitions operations 
ORA-06512: "Database.MYSP", line 4
Run Code Online (Sandbox Code Playgroud)

有人可以帮助我在哪里出错.

oracle plsql oracle11g

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

ORACLE PL/SQL包需要几个小时才能完成

我有一个Oracle包,其输入参数为开始日期sysdate-365,结束日期为sysdate + 90.它找到从sysdate-365到sysdate + 90的每个日期,这是455天,然后它为每个日期循环,从主表中获取记录再次循环基于主表数据,从其他表获取值,做一些逻辑并插入工作台.完成需要10个多小时.

我想过使用dbms_scheduler来运行包并行,因为DBA不建议这样做.任何人都可以建议任何其他方式来提高性能?

代码段:

loop for date range
select some_data from master_table where master_date = cursor.date;


loop for 
select other_data from other_table where other_date = cursor.date
start with some_data 
connect by other_parent = prior other_child;


select count(*) into v1cnt from third_table where third_date = cursor.date and third_data=other_data; 

if v1cnt  > 0 then
select third_data into variable1 from third_table where third_date = cursor.date and third_data=other_data; 
else
variable1 = null;
end if;

select count(*) into v2cnt from fourth_table where …
Run Code Online (Sandbox Code Playgroud)

sql oracle plsql

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

如何调试这个plsql代码?

我在执行ps-sql过程时遇到错误.

下面是我的剧本.

set serveroutput on size 100000
set echo off
set feedback off
set lines 300

declare

  cursor sessinfo is
    SELECT NVL(s.username, '(oracle)') AS      username,
           s.osuser,
           s.sid,
           s.serial#,
           p.spid,
           s.status,
           s.module,
           s.machine,
           s.program,
           TO_CHAR(s.logon_Time,'DD-MON-YYYY HH24:MI:SS') AS logon_time,
           s.last_call_et/3600  last_call_et_Hrs,
           lpad(t.sql_text,30) "Last SQL"
      from gv$session s, 
           gv$sqlarea t,
           gv$process p 
      where s.sql_address = t.address and 
            s.sql_hash_value =t.hash_value and 
            p.addr=s.paddr and 
            s.status='INACTIVE' and 
            s.last_call_et > (3600) 
      order by last_call_et;

  sess sessinfo%rowtype;
  sql_string1 Varchar2(2000);
  sql_string2 Varchar2(2000);
begin
  open sessinfo;

  loop
    fetch sessinfo into …
Run Code Online (Sandbox Code Playgroud)

oracle plsql syntax-error

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

触发器不会工作

我创建了Trigger来检查广告表中的付款并且应该更新另一个表(customer_account)有人知道bug在哪里吗?

   CREATE OR REPLACE TRIGGER Payment_check
   after UPDATE ON Ads
   FOR EACH ROW
   BEGIN
   IF NEW.Pay_done==('y'||'Y')THEN
   UPDATE customer_account SET customer_account.Plcd_ads = NEW.Ad_id
   WHERE customer_account.C_id = NEW.Customer;
   ELSE
   UPDATE customer_account SET customer_account.Pend_ads = NEW.Ad_id 
   WHERE customer_account.C_id = NEW.Customer;
   END IF;
   END;


 //////bug

 Error at line 7: PLS-00103: Encountered the symbol "." when expecting one of the                                                                following:

  mod  
  continue current sql execute forall merge
 pipe purge
 The symbol "" was substituted for "." to continue.

5. IF NEW.Pay_done==('y'||'Y')THEN
6. UPDATE customer_account …
Run Code Online (Sandbox Code Playgroud)

oracle plsql syntax-error oracle11g

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

Oracle中的PL/SQL布尔数据类型

我试图在Oracle上执行下面的代码; 打算打印布尔值.这不是在复杂.任何帮助?

DECLARE
 v_bool BOOLEAN;
BEGIN
 IF (v_bool IS NULL) THEN
 DBMS_OUTPUT.PUT_LINE('By default the value is NULL');
 ELSEIF (v_bool = TRUE) THEN
 DBMS_OUTPUT.PUT_LINE('By default the value is TRUE');
 ELSE
 DBMS_OUTPUT.PUT_LINE('By default the value is FALSE');
 END IF;
END;
Run Code Online (Sandbox Code Playgroud)

oracle types plsql boolean

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

Oracle logoff触发器来获取会话执行的sql

我创建了一个包含所有可信源的主机名的表.如果连接的主机不在snif_session表中,我已经编写了一个oracle注销触发器来获取该会话执行的所有sql的详细信息.我将输出带到utl_file输出,其中包含sid,主机名,连接时间.

SQL> select * from snif_Session;

ALLOWED_HOST
--------------------------------------------------
RND1
WORKGROUP\RND1
Run Code Online (Sandbox Code Playgroud)

我被卡住的地方是用于获取该特定会话执行的所有sql的查询(我可以从v $ mystat获取sid).

这样做效果最好:

select a.sql_id
         ,b.sql_text 
from dba_hist_active_sess_history a
        ,dba_hist_sqltext b
where a.sql_id=b.sql_id 
Run Code Online (Sandbox Code Playgroud)

要么

select s.sid
         , s.serial#
         , a.sql_text
from v$session s
    join v$sqlarea a 
            on a.hash_value = s.sql_hash_value ;
Run Code Online (Sandbox Code Playgroud)

这是我写的代码(块),我将放在触发器中.

declare
    machine_id varchar2(50);
    val int;
    auth_terminal varchar2(50);
    check_machine varchar2(1000);
    mydate char(50);
    osuser_1 varchar2(50);
    sid_1 int;
    sql_query_1 varchar2(5000);
    machine_1 varchar2(50);
    trace_info UTL_FILE.FILE_TYPE;
begin
    select machine into check_machine 
    from v$session 
    where sid in (select distinct(sid) from v$mystat) ;
    select …
Run Code Online (Sandbox Code Playgroud)

security oracle audit triggers plsql

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

如何在PL/SQL中编译所有无效的obect?

我想编写一个PL/SQL过程,找到所有无效对象,按层次方式排序(超类型--->子类型),然后编译它们.

sql oracle plsql

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

有没有办法以编程方式从Oracle包中提取表引用?

一年几次,我的团队会出于某种原因编写一个新的Oracle软件包,而且很多时候这个软件包只引用了这些软件包(我们的软件包运行的用户/角色)已经有资格的表.

偶尔,情况并非如此.签入包,无法编译,我们得到一个含有表名附近行号的神秘错误消息.

麻烦的是,在这一点上,我们将等待几个小时(政治)批准过程发布,给予补助,我们检查包...并且它失败并带有新的表名.

有没有办法以编程方式获取所有引用的列表?如果是这样,我们可以将其自动化以检查dba_tab_privs以查看是否需要预先授予补助,或者甚至生成授权脚本以使实际发放这些授权的团队更容易(特别是几个月之后,当它部署到生产时)我们再一次经历了整个对不起的烂摊子.

oracle plsql package

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

真实表的表集合

我有下一张桌子:

CREATE TABLE my_table (
  id  VARCHAR2(20 BYTE) NOT NULL,
  name VARCHAR2(40 BYTE) NOT NULL,
  age NUMBER,
  PRIMARY KEY (id, name)
);
Run Code Online (Sandbox Code Playgroud)

我想从my_table创建表集合.填写我的数据.

我尝试:

DECLARE  
  type my_type IS TABLE OF my_table%ROWTYPE;
  my_data my_type := my_type();
BEGIN
  my_data := my_type('1','Jon',5);
END;
Run Code Online (Sandbox Code Playgroud)

结果我得到:

ORA-06550: line 8, column 16:
PLS-00306: wrong number or types of arguments in call to 'my_type'
ORA-06550: line 8, column 16:
PLS-00306: wrong number or types of arguments in call to 'my_type'
ORA-06550: line 8, column 16:
PLS-00306: wrong …
Run Code Online (Sandbox Code Playgroud)

oracle plsql oracle-sqldeveloper

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

ORA-1843:更新记录时不是有效月份

我想出于某种目的更新我的日期列.已存储在列中的值如下所示

18-06-14

并且在更新时如果我不更新任何东西并进行调试和检查,则需要格式化为 2014-06-18T00:00:00

因此,在更新时,我在我的程序中得到如下错误.

ORA-1843:不是有效月份

以下是我将其作为更新参数发送的方式

LAUNCH_DATE = P_LAUNCH_DATE,

P_LAUNCH_DATE我有更新的价值观.这给了我上面的错误.我该如何解决它.

UPDATE

这是我整个存储过程中使用它的方式.

PROCEDURE INSERT_INTO_RRSOC_MST
  (    
    P_STORE_CODE IN NVARCHAR2,
    P_STATE IN NVARCHAR2,
    P_CITY IN NVARCHAR2,
    P_SITE_STORE_FORMAT IN NVARCHAR2,
    P_STORE_SITENAME IN NVARCHAR2,
    P_STORE_SITENAME_LANDL_1 IN NVARCHAR2,
    P_STORE_SITENAME_LANDL_2 IN NVARCHAR2,
    P_STORE_ASST_MANAGER_NAME IN NVARCHAR2,
    P_STORE_ASST_MANAGER_MOBNO IN NVARCHAR2,
    P_STORE_MANAGER_NAME IN NVARCHAR2,
    P_MANAGER_MOBNO IN NVARCHAR2,
    P_EMP_NEAREST_STORE IN NVARCHAR2,
    P_EMP_NEAREST_STORE_MOBNO IN NVARCHAR2,
    P_SUPERVISOR_NAME IN NVARCHAR2,
    P_SUPERVISOR_MOBNO IN NVARCHAR2,
    P_SECURITY_SUP_NAME_STORE IN NVARCHAR2,
    P_SECURITY_SUP_MOBNO_STORE IN NVARCHAR2,
    P_NAME_ALIGNED_LPO IN NVARCHAR2,
    P_LPO_MOBILENO IN NVARCHAR2,
    P_ALPM_ALPO_NAME IN NVARCHAR2,
    P_ALPM_ALPO_MOBNO IN …
Run Code Online (Sandbox Code Playgroud)

oracle plsql stored-procedures sql-update

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