我正在尝试使用如下 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)
任何建议将不胜感激。
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)
对分号感到困惑。为什么在第一个代码中需要分号和结束情况;需要关键字。但在第二段代码中没有分号并且也只是结束;我知道在第二个中我正在为变量赋值,但那又怎样呢?
我在选民登记册上有一个 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) 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) 我有一个PL/SQL过程,它创建一个临时表,然后使用游标从此临时表中提取数据,处理数据,然后删除临时表.但是,如果数据库中不存在表,则Oracle不允许使用游标.
请帮我处理这件事.
我一直在尝试运行这个脚本,但我得到的只是这个错误:
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)
非常感谢您的帮助.
我收到错误:
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) 这里我们只是在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领域的新人,我有一些问题.
如下表格
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语句中得到结果,非常感谢.
我想接受一个数字并返回两次参数值.虽然我希望它顺其自然
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)
很明显,函数声明是不正确的,但有人知道如何正确实现这个简单的代码吗?