标签: plsql

PL/SQL 日期时间更新集结果时间为 00:00:00

我正在尝试使用如下 SQL 设置比 end_ts 日期时间少一秒的日期时间

UPDATE Table1 SET 
          UPDTD_DT=(SELECT TO_DATE(END_TS-1/(24*60*60),'DD/MM/YYYY HH24:MI:SS')
          FROM View1) WHERE id = '123';
Run Code Online (Sandbox Code Playgroud)

但运行此更新后,日期时间为 00:00:00。我显示并检查了 TO_DATE(END_TS-1/(24 60 60),'DD/MM/YYYY HH24:MI:SS') 看起来不错。

SELECT TO_DATE(END_TS-1/(24*60*60),'DD/MM/YYYY HH24:MI:SS') FROM View1 is 25/03/2022 10:14:44
Run Code Online (Sandbox Code Playgroud)

任何建议将不胜感激。

sql oracle plsql plsqldeveloper

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

Oracle plsql语法混乱?

declare
    v_name varchar2(10) := 'bruce';
    v_name2 number;

begin
        case v_name
              when 'bruce' then DBMS_OUTPUT.PUT_LINE('corr');
              else DBMS_OUTPUT.PUT_LINE('incorrect');
        end case;
        DBMS_OUTPUT.PUT_LINE(v_name2);
end;




declare
    v_name varchar2(10) := 'bruce';
    num number(2) := 10;
begin
        num := case v_name
              when 'bruce' then 2
              else 12
        end;
        DBMS_OUTPUT.PUT_LINE(num);
end;
Run Code Online (Sandbox Code Playgroud)

对分号感到困惑。为什么在第一个代码中需要分号和结束情况;需要关键字。但在第二段代码中没有分号并且也只是结束;我知道在第二个中我正在为变量赋值,但那又怎样呢?

sql oracle syntax plsql

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

Oracle SQL。用户定义的函数不会在 SELECT 语句中运行,但如果包装在过程中则会运行

我在选民登记册上有一个 oracleSQL 数据库。为了检查选民之前是否投票过,我创建了一个PreviouslyVoted(election_code, electorate_code, voter_id)如下所示的函数。

create or replace FUNCTION previouslyVoted(election_code_in IN NUMBER, electorate_id_in IN NUMBER, voter_id_in IN NUMBER)
RETURN BOOLEAN IS
voter_id_temp NUMBER;
BEGIN
    SELECT COUNT(*) INTO voter_id_temp
    FROM ballot_issuance bi
    WHERE bi.electorate_id = electorate_id_in
    AND bi.election_serial_number = election_code_in
    AND bi.voter_id = voter_id_in;

RETURN voter_id_temp > 0 ;
END;
Run Code Online (Sandbox Code Playgroud)

现在我想从 PHP 服务器调用它。

我尝试运行发送以下查询:

Select previouslyVoted(" .ELECTION ."," .ELECTORATE .", $oracle_voter_id) "Result" FROM dual;
Run Code Online (Sandbox Code Playgroud)

这没有用。我收到以下错误:

ORA-00902: invalid datatype
00902. 00000 -  "invalid datatype"
*Cause:    
*Action:
Error at Line: 1 …
Run Code Online (Sandbox Code Playgroud)

sql oracle types plsql function

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

无法在 where 子句中调用函数

CREATE OR REPLACE FUNCTION getFlightSeats (v_seatRange IN VARCHAR2)
 RETURN VARCHAR2
IS
  seat_number_template  seat_num_collection;
  seat_numbers          seat_num_collection;
  result_query          VARCHAR2(200);
  condition             VARCHAR2(200);
--create or replace type seat_num_collection AS table of VARCHAR2(60);
BEGIN
  IF v_seatRange LIKE '%-%' THEN
    SELECT comma_split
    BULK COLLECT INTO seat_number_template
    FROM (
           SELECT regexp_substr(v_seatRange, '[^,]+', 1, level) as comma_split
             FROM dual
             connect by regexp_substr(v_seatRange, '[^,]+', 1, level) is not null
         );
    FOR i IN 1..seat_number_template.COUNT
    LOOP
      DBMS_OUTPUT.PUT_LINE('seat_number_template inside loop::::: ' || seat_number_template(i));
      SELECT hiphen_split
      BULK COLLECT INTO seat_numbers
      FROM ( …
Run Code Online (Sandbox Code Playgroud)

sql oracle plsql function

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

在Oracle中创建游标之前创建表

我有一个PL/SQL过程,它创建一个临时表,然后使用游标从此临时表中提取数据,处理数据,然后删除临时表.但是,如果数据库中不存在表,则Oracle不允许使用游标.

请帮我处理这件事.

oracle plsql temp-tables oracle10g

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

在期待以下之一时遇到符号"IS"

我一直在尝试运行这个脚本,但我得到的只是这个错误:

Error report:
ORA-06550: line 3, column 15:

PLS-00103: Encountered the symbol "IS" when expecting one of the following:

constant exception <an identifier>
<a double-quoted delimited-identifier> table long double ref
char time timestamp interval date binary national character
nchar
The symbol "IS" was ignored.
Run Code Online (Sandbox Code Playgroud)

这是我的脚本:

set serveroutput on

   DECLARE
   cursor depts_cur is select dname from dept;
   depts_cur_rec is depts_cur%type; 

   BEGIN
   loop
     fetch depts_cur into depts_cur_rec;
     exit when depts_cur_rec%notfound;
     dbms_output.put_line('Department: ' || depts_cur_rec);
   end loop;
   close depts_cur;
   END;
Run Code Online (Sandbox Code Playgroud)

非常感谢您的帮助.

oracle plsql cursor

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

我的PL/SQL功能有什么问题?

我收到错误:

ORA-06575: Package or function GET_CONC_NAMES is in an invalid state
Run Code Online (Sandbox Code Playgroud)

当我尝试通过以下方式调用我的get_conc_names函数时:

SELECT get_conc_names(EVENT_ID) FROM DT_EVENT_SERVICE;
Run Code Online (Sandbox Code Playgroud)

功能本身:

CREATE OR REPLACE FUNCTION get_conc_names( p_event_id IN dt_event_service.event_id%type ) 
  RETURN VARCHAR2 
IS 
  l_conc_names VARCHAR2(32676);  
  -- You may want a smaller variable if you know the result will be smaller 
BEGIN 
  SELECT LTRIM(SYS_CONNECT_BY_PATH(name, ', '),',') conc_names 
    INTO l_conc_names 
    FROM ( 
      SELECT id, name, rownumber, cnt 
        FROM (SELECT es.EVENT_ID as id
                    ,s.SERVICE_NAME as name
                    ,ROW_NUMBER() OVER (order by name) as rownumber
                    ,COUNT(*) OVER () as …
Run Code Online (Sandbox Code Playgroud)

sql database oracle plsql

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

这个DELETE过程有什么问题.我们可以这样写,还是有更好的方法来编写相同的proc

这里我们只是在90天历史记录之前删除主表和子表中的记录.假设表中有超过20k的记录可供删除.在这里,我为每个5k记录提交了提交.如果我错了,请告诉我?

create or replace Procedure PURGE_CLE_ALL_STATUS  ( days_in IN number ) 
IS 

       reccount  NUMBER  := 0;

       CURSOR del_record_cur IS

    SELECT EXCEPTIONID   FROM   EXCEPTIONREC
         WHERE  trunc(TIME_STAMP) < trunc(sysdate - days_in );


BEGIN
       FOR rec IN del_record_cur LOOP

      delete from EXCEPTIONRECALTKEY   -- child table 
          where EXCEPTIONID =rec.EXCEPTIONID ;

      delete from EXCEPTIONREC -- master table
          where EXCEPTIONID =rec.EXCEPTIONID;  


         reccount := reccount + 1;

         IF (reccount >= 1000) THEN
           COMMIT;
           count := 0;
         END IF;
       commit;
       END LOOP;
       COMMIT;
       DBMS_OUTPUT.PUT_LINE('Deleted ' || total || …
Run Code Online (Sandbox Code Playgroud)

sql oracle plsql

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

从表中的两列中选择相同的数据,并使用一个sql语句显示所有数据

我是一个sql领域的新人,我有一些问题.

如下表格

Table Name:EM

ID    name    Birth   High
1     Tom     11/23   65
2     Mary    11/23   65
3     Bill    03/02   55
4     Liny    01/08   45
5     Kevin   05/16   50
6     Lee     05/16   50
Run Code Online (Sandbox Code Playgroud)

但我只需要下面的数据

ID    name    Birth   High
1     Tom     11/23   65
2     Mary    11/23   65
3     Kevin   05/16   50
4     Lee     05/16   50
Run Code Online (Sandbox Code Playgroud)

我用傻瓜sql来获取这样的数据

select * from em where birth = '11/23' and high = '65';
select * from em where birth = '05/16' and high = '50';
Run Code Online (Sandbox Code Playgroud)

请教我如何在一个sql语句中得到结果,非常感谢.

sql plsql oracle10g plsqldeveloper

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

PLSQL函数声明

我想接受一个数字并返回两次参数值.虽然我希望它顺其自然

float timestwo(float num){num*2; 返回num;}

然而,plsql似乎需要一种更加模糊的方法.我以为我已经遵循了oracle 11g要求的方法,但是在尝试执行下面的代码时,

exec dbms_output.enable(1000000); --boilerplate
set serveroutput on           --boilerplate
CREATE OR REPLACE FUNCTION timestwo (num
IN number)
RETURN number IS
   product number(2) := 0;
BEGIN
   product := (num*2);
   RETURN product;
END;
/
EXECUTE timestwo(5);
show error                       --boilerplate
Run Code Online (Sandbox Code Playgroud)

dbms引发以下错误:

ERROR at line 1:
ORA-06550: line 1, column 7:
PLS-00221: 'TIMESTWO' is not a procedure or is undefined
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
No errors
Run Code Online (Sandbox Code Playgroud)

很明显,函数声明是不正确的,但有人知道如何正确实现这个简单的代码吗?

sql oracle variables plsql function

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