我有一个布尔值,并尝试将其转换为plsql中的数字.
PROCEDURE Test(
contract_ IN VARCHAR2,
mch_code_ IN BOOLEAN)
IS
val_ NUMBER;
BEGIN
val_ := mch_code_.to_number();
...some code
END Test;
Run Code Online (Sandbox Code Playgroud)
这不行?
如何在plsql中从布尔值转换为数字?
我正在尝试编译以下PL/SQL:
PROCEDURE SP(INPUT1 IN VARCHAR2)
V_BOL BOOLEAN := FALSE;
BEGIN
IF (INPUT1 = 'XYZ')
THEN V_BOL := TRUE;
END IF;
UPDATE T1 /* Line 17 */
SET T1.C1 = (
SELECT CASE
WHEN (V_BOL AND T1.N1 BETWEEN 1 AND 10) THEN 'J' /* Line 20 */
END
FROM DUAL)
...
Run Code Online (Sandbox Code Playgroud)
但是得到以下错误:
Error(17,9): PL/SQL: SQL Statement ignored
Error(20,18): PL/SQL: ORA-00920: invalid relational operator
Run Code Online (Sandbox Code Playgroud) 我想根据一系列条件为变量赋值。我可以使用IF / ELSE来执行此操作,如以下代码所示:
DECLARE @param1 VARCHAR(100) = 'value1';
DECLARE @param2 AS Varchar (25) = 'value2';
DECLARE @param3 AS Varchar (25) = 'value3';
DECLARE @param4 AS Varchar(25) = 'value4';
SELECT @param1 = @param1 + '_' + @param2;
BEGIN
IF LEN(@param3) > 0 AND LEN(@param4) > 0
SELECT @param1= @param1+ '_' + @param3 + '_' + @param4;
ELSE
IF LEN(@param3) > 0
SELECT @param1= @param1+ '_' + @param3;
ELSE IF LEN(@param4) > 0
SELECT @param1= @param1 + '_' + @param4;
END
Run Code Online (Sandbox Code Playgroud)
我想用CASE,WHEN …
我正在尝试运行以下循环:
DECLARE
v_banknumber varchar2(9) := '123456789';
v_counter number := 9;
v_result number;
begin
for i in v_banknumber
loop
v_result := v_counter * TO_NUMBER(i) + v_result;
v_counter := v_counter - 1;
end loop;
end;
Run Code Online (Sandbox Code Playgroud)
我在第2行出现错误:
Error report -
ORA-06550: line 6, column 10:
PLS-00456: item 'V_BANKNUMBER' is not a cursor
ORA-06550: line 6, column 1:
PL/SQL: Statement ignored
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
*Action:
Run Code Online (Sandbox Code Playgroud)
如果我读得很好,似乎应该可以。在座的任何人都可以解释我为什么不起作用?
必须将第一个数字乘以9,第二个数字乘以8,第三个数字乘以7,依此类推,并将其总和保存在结果变量中。
我有多个以"PLAYERS_"开头的表,它们包含一些我想要一次检索的数据.我可能会在将来添加更多以"PLAYER_"开头的表,所以我希望有一个select语句,它可以获取这些表的所有数据,而无需从所有这些表中进行选择.
这是我正在尝试使用的select语句,但我认为它不准确:
SELECT * FROM (SELECT TABLE_NAME FROM USER_TABLES WHERE TABLE_NAME LIKE 'PLAYER_%';
Run Code Online (Sandbox Code Playgroud)
所有这一切都是让我得到子查询的结果,这是表的信息(不是我需要的).有没有其他方法可以实现我想要实现的目标?
我想要实现的目标与:
SELECT * FROM PLAYER_1, PLAYER_2, PLAYER_3;
Run Code Online (Sandbox Code Playgroud)
但是我想以一种我不应该担心像这样放表名的方式来做这件事.
更新我的表时出现此错误
UPDATE "Username"."EMPPROJECT"
SET ENDDATE = TO_DATE('2016-09-11 00:00:00', 'YYYY-MM-DD HH24:MI:SS')
WHERE ROWID = 'AAF+8XAAEAAGBIGAAB'
AND ORA_ROWSCN = '537035617'
Run Code Online (Sandbox Code Playgroud)
保存对表"Username"的更改时出错."EMPPROJECT":第8行:
ORA-04091:表Username.EMPPROJECT正在变异,触发器/函数可能看不到它ORA-06512:在"Username.CHECKOVERLAPDATEUPDATE",第4行
ORA-04088 :执行触发器'Username.CHECKOVERLAPDATEUPDATE'时出错
触发器的定义如下:
create or replace trigger checkOverlapDateUpdate
before Update on EmpProject
for each row
declare
countOfOverlap integer;
begin
select count(*)
into countOfOverlap
from EmpProject EP
where isOverlapping(:new.startDate, :new.endDate, startDate, endDate) = 1
and EP.EmpID = :new.EmpId;
if countOfOverlap > 0
then
RAISE_APPLICATION_ERROR(-00000, 'Overlapping Insertion Dates');
rollback;
end if;
end;
Run Code Online (Sandbox Code Playgroud) 在我的存储过程中,我运行像soi这样的查询:
SELECT NETWORKOWNER.BUS_SEQ.NEXTVAL@LEGACYSMITH.WORLD
FROM TBLDECIDERCONTRACT@LEGACYSMITH.WORLD
WHER PROVID = 28938
Run Code Online (Sandbox Code Playgroud)
如何仅获得一个 NEXTVAL结果?
PROCEDURE CRIAR_JOB_LIMPA_proc IS
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name => 'JOB_LIMPA_TAB',
job_type => 'STORED_PROCEDURE',
job_action => 'SIIMA_JOB_LIMPA_TAB_pkg' || '.LIMPAR_TAB_proc',
start_date => To_Date('12-NOV-2018 11:20 AM', 'dd-mon-yyyy hh:mi AM' AT TIME ZONE 'GMT'),
repeat_interval => 'FREQ=minutely;interval=3',
comments => 'Inserir em tabela backup e apagar na original',
enabled => TRUE);
END;
Run Code Online (Sandbox Code Playgroud)
我有这个工作,运行良好,当我手动执行它,但它从来没有开始,每当我设置的开始日期,我已经尝试设置时区和一切,但它似乎并没有帮助.
任何可能的问题/解决方案的想法?
谢谢
以下查询中的感叹号(!)标记是什么?
l_sql := q'!
SELECT CASE WHEN FILTER_CNT = 0 THEN NULL ELSE FILTER_LIST END AS FILTER_LIST
FROM
(
SELECT 'TABLE_NAME NOT LIKE ' || LISTAGG(''''||EXCLUSION_CRITERIA||'''', ' AND TABLE_NAME NOT LIKE ') WITHIN GROUP (ORDER BY ROWNUM) AS FILTER_LIST, COUNT(*) AS FILTER_CNT
FROM !'|| p_after_owner ||q'!.UT_TABLE_EXCLUSION
WHERE EXCLUSION_TYPE = 'P'
)
!';
Run Code Online (Sandbox Code Playgroud) 我有下表:
create table students
(
stuName varchar2(100),
cgpa number
);
Run Code Online (Sandbox Code Playgroud)
我的目标是创建一个PL/SQL触发器,如果有人试图输入包含任何数值的名称,将触发该触发器.我的尝试:
create or replace trigger invalid_name
before insert
on students
for each row
declare
vName varchar2(100);
begin
vName := :new.stuName;
if upper(vName) like upper(vName) then
vName := initcap(vName);
end if;
exception
when value_error then
dbms_output.put_line('ERROR: Name contains numeric value(s).');
end;
Run Code Online (Sandbox Code Playgroud)
我想如果upper函数是对包含任何数值的字符串进行操作,它会抛出异常.但这并没有发生,insert行动正在执行中.
plsql ×10
oracle ×9
sql ×7
database ×1
dynamic-sql ×1
schedule ×1
sql-job ×1
sql-server ×1
sql-update ×1
t-sql ×1
variables ×1