标签: plsql

如何在plsql中将Boolean转换为Number?

我有一个布尔值,并尝试将其转换为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中从布尔值转换为数字?

oracle plsql

1
推荐指数
2
解决办法
4027
查看次数

PL/SQL代码中的布尔变量解析和用法有什么问题?

我正在尝试编译以下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)

sql oracle variables plsql compiler-errors

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

如何使用案例在SQL中有条件地分配值

我想根据一系列条件为变量赋值。我可以使用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 …

sql t-sql sql-server plsql

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

在PL / SQL变量中循环不是游标

我正在尝试运行以下循环:

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,依此类推,并将其总和保存在结果变量中。

oracle plsql

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

SELECT语句从不同的表中获取所有列

我有多个以"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)

但是我想以一种我不应该担心像这样放表名的方式来做这件事.

sql database oracle plsql

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

触发计数行给出ORA-04091:表是变异的,触发器/函数可能看不到它

更新我的表时出现此错误

 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)

sql oracle plsql database-trigger sql-update

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

如何在Oracle查询中仅获取一个特定的NEXTVAL结果?

在我的存储过程中,我运行像soi这样的查询:

SELECT NETWORKOWNER.BUS_SEQ.NEXTVAL@LEGACYSMITH.WORLD 
FROM TBLDECIDERCONTRACT@LEGACYSMITH.WORLD
WHER PROVID = 28938
Run Code Online (Sandbox Code Playgroud)

如何仅获得一个 NEXTVAL结果?

sql oracle plsql

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

oracle作业只能手动运行

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)

我有这个工作,运行良好,当我手动执行它,但它从来没有开始,每当我设置的开始日期,我已经尝试设置时区和一切,但它似乎并没有帮助.

任何可能的问题/解决方案的想法?

谢谢

sql oracle plsql schedule sql-job

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

PL/SQL:ORACLE中的感叹号

以下查询中的感叹号(!)标记是什么?

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)

oracle plsql dynamic-sql

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

检查字符串是否包含任何数值

我有下表:

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行动正在执行中.

sql oracle plsql

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