标签: plsql

在 Oracle 过程中的字符串中调用函数

我使用 Oracle 10g 编写一个应用程序。

我目前面临这个问题。我将“文件名”作为 varchar2 类型的参数。

文件名可能包含的示例值是:'TEST || to_char(sysdate, 'DDD')'.

在该过程中,我想获取该文件名的值,如 TEST147 中所示。当我写:

select filename
into ffilename
from dual;
Run Code Online (Sandbox Code Playgroud)

我得到值 ffilename = TEST || to_char(sysdate, 'DDD') 这是有道理的。但是我怎样才能解决这个问题并调用字符串值中的函数呢?

帮助表示赞赏。谢谢。

oracle plsql dynamic-sql oracle10g plsqldeveloper

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

如何根据 Oracle 中的动态列表检查 IN 条件?

编辑:更改标题以适合下面的代码。

我试图从 Oracle 表中检索可接受值的列表,然后对另一个表执行 SELECT,同时将某些字段与所述列表进行比较。

我试图用光标来做到这一点(如下所示),但是失败了。

DECLARE
    TYPE gcur IS REF CURSOR;
    TYPE list_record IS TABLE OF my_table.my_field%TYPE;
    c_GENERIC gcur;
    c_LIST list_record;
BEGIN
    OPEN c_GENERIC FOR
    SELECT my_field FROM my_table
    WHERE some_field = some_value;

    FETCH c_GENERIC BULK COLLECT INTO c_LIST;

    -- try to check against list
    SELECT * FROM some_other_table
    WHERE some_critical_field IN c_LIST;

END
Run Code Online (Sandbox Code Playgroud)

基本上,我想做的是将可接受的值列表缓存到变量中,因为稍后我将反复检查它。

在 Oracle 中如何执行此操作?

oracle plsql list cursor

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

Oracle pl/sql ORA-02204 错误

使用以下语句(尝试授予角色使用视图的权限),我在 Oracle 中收到错误:

grant execute on "PMC_TDT_V_APLICACION_EMAIL" to "PMC_TDT_ROL_USR";
Run Code Online (Sandbox Code Playgroud)

错误:

SQL Error: ORA-02204: privilegios ALTER, INDEX y EXECUTE no permitidos para las vistas
02204. 00000 -  "ALTER, INDEX and EXECUTE not allowed for views"
*Cause:    An attempt was made to grant or revoke an invalid privilege on a view.
*Action:   Do not attempt to grant or revoke any of ALTER, INDEX, or
           EXECUTE privileges on views.
Run Code Online (Sandbox Code Playgroud)

oracle plsql

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

获取重定向 URL 的 PL/SQL 代码

我被要求编写 PL/SQL 代码来获取定向页面的 URL。

一个 URL 可能会自动重定向到另一 URL。

例如,链接http://www.arabseed.com可能会重定向到http://www.arabseed.com/ar/home.html.

所以我的 PL/SQL 块应该接受第一个 URL 并返回第二个 URL。我在 Oracle API 中查看了@htp pkg,它对我没有多大帮助。

oracle plsql

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

PL/SQL-更新员工薪资,加薪金额错误

我需要更新部门 40 和 70 员工的工资。部门 40 的所有员工都会加薪 10%,而部门 70 的员工都会加薪 15%。

我有 1 名来自 70 部门的员工,他的工资是 10000,所以他会有 15% 的加薪。我预计他的工资会变成11500,结果却变成了13225。我不明白为什么。40 部门的员工加薪是正确的,只有 70 部门的这个员工加薪是错误的。

这是 pl/sql 块..

SET serveroutput ON
DECLARE

  CURSOR cur_emp
  IS
    SELECT * FROM employees WHERE department_id = 40 OR department_id = 70;
  rec_emp cur_emp%rowtype;
BEGIN
  OPEN cur_emp;
  LOOP
    FETCH cur_emp INTO rec_emp;
    IF rec_emp.department_id = 40 THEN
      UPDATE employees
      SET salary                = salary + (salary * 0.1)
      WHERE employee_id         = rec_emp.employee_id;
    elsif rec_emp.department_id = 70 THEN
      UPDATE employees …
Run Code Online (Sandbox Code Playgroud)

sql database plsql updating

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

PL/SQL oracle 函数与 ora-01744 INTO

我在 myqsl 中有一组函数,我需要编写 oracle 版本。

在我遇到limit 1问题之前一切进展顺利。我认为我对限制的查询是问题所在,但无法找出问题所在。你能帮我个忙吗?

MySQL版本

SELECT concat(fld_name, ' ', fld_surname) 
   INTO info 
FROM tbl_customer 
WHERE fld_flat_id = flatId and fld_type = typeId 
order by fld_own_date desc limit 1;
Run Code Online (Sandbox Code Playgroud)

Oracle版本(导致问题)

SELECT Q1.* 
FROM (
    SELECT ROWNUM AS RWNR2, Q2.* 
    FROM (
        SELECT (NAME || ' ' || SURNAME) 
           INTO info 
        FROM TB_CUSTOMER 
        WHERE FLAT_ID = flatId AND TYPE = typeId 
        ORDER BY OWN_DATE DESC
    ) Q2 
    WHERE ROWNUM <= 1 
 ) Q1 
 WHERE Q1.RWNR2 >  0; …
Run Code Online (Sandbox Code Playgroud)

sql oracle plsql

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

Oracle 正则表达式 (REGEXP_LIKE) 太长错误 - ORA-12733

我必须在 PL/SQL 中验证 IPv6 地址。我从这里想出了正则表达式:Regular Expression (RegEx) for IPv6 Different from IPv4

我收到ORA-12733: regular expression too long错误。有没有办法解决?

if ( REGEXP_LIKE(v,'^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]1{0,1}[0-9]){0,1}[0-9]))$') ) then
    self.success := 1;
    self.message := null;
    return;
else
    self.success := 0;
    self.message := 'Invalid IPv6 address. Example of a valid format: 2001:0db8:0000:0000:0000:ff00:0042:8329';
    return;
end if;
Run Code Online (Sandbox Code Playgroud)

限制是512(/sf/answers/188588361/),我在657。我想不出有什么办法可以把它分开。

将 java 类导入 Oracle 是唯一的方法吗?https://community.oracle.com/thread/1149462?start=0&tstart=0

更新:我正在尝试这个,但是当我运行来select测试它时,它会抛出ORA-29531: no method isProperIPv6Address in class ipv6. 我以前没有在 Oracle 中搞过 java,所以我不确定我是否已经接近或者这是否是一个坏主意。(摘自https://community.oracle.com/message/8648095 …

regex sql oracle plsql

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

处理插入到选择中的异常

方案1

我有表交易表

create table TXN_HEADER
(
  txn_id         NUMBER(10) not null,
  txn_Date      date 
  product_id    NUMBER(10),
  company_id    NUMBER(10),
  dealer_id     NUMBER(10),
  tran_amt      number(10,2)
)
Run Code Online (Sandbox Code Playgroud)

上表具有对product.product_id 和company.company_id 的外键引用。

该表有 5m 行

模式2

create table TXN_HEADER_REPORTS
(
  txn_id         NUMBER(10) not null,
  txn_Date      date 
  product_id    NUMBER(10),
  company_id    NUMBER(10),
  dealer_id     NUMBER(10),
  tran_amt      number(10,2)
)
Run Code Online (Sandbox Code Playgroud)

这里我们也有相同的约束,具有对product.product_id和company.company_id的外键引用。

在模式 2 中,我们尝试一次性插入从模式 1 到模式 2 的所有行,如下所示

begin 
  insert into TXN_HEADER_REPORTS (
  txn_id, txn_Date ,product_id,company_id   ,  dealer_id ,  tran_amt)
  select 
  txn_id, txn_Date ,product_id,company_id   ,  dealer_id ,  tran_amt
  from schema1.TXN_HEADER;
  commit;
exception   
  when …
Run Code Online (Sandbox Code Playgroud)

oracle plsql insert-into

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

如何将oracle toad中的存储过程保存到脚本文件

我在 oracle toad 中有大约 1300 个存储过程。我想将每个存储过程保存到单独的脚本文件中,因为我需要将其更新到另一个数据库。如何执行此操作

oracle toad plsql

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

Oracle 将变量与包绑定

我是 Oracle PLSQL 领域的新手,有 T-SQL 背景。

我在尝试使用绑定变量生成一些动态 sql 来调用包中的方法时遇到问题。

我尝试调用的方法是 .New__ 并且属于包 PACKAGE_NAME

我的 .New__ 方法看起来像这样

PROCEDURE New__ (
info_       OUT    VARCHAR2,
objid_      OUT    VARCHAR2,
objversion_ OUT    VARCHAR2,
attr_       IN OUT NOCOPY VARCHAR2,
action_     IN     VARCHAR2 )
Run Code Online (Sandbox Code Playgroud)

因此我这样称呼它:

DECLARE
p0 VARCHAR2(10) := null; -- param 0 of the method
p1 VARCHAR2(10) := null; -- param 1 of the method
p2 VARCHAR2(10) := null; -- param 2 of the method
p3 VARCHAR2(20) := null; -- param 3 of the method
p4 …
Run Code Online (Sandbox Code Playgroud)

variables plsql bind oracle10g

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