我使用 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 表中检索可接受值的列表,然后对另一个表执行 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 中收到错误:
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) 我被要求编写 PL/SQL 代码来获取定向页面的 URL。
一个 URL 可能会自动重定向到另一 URL。
例如,链接http://www.arabseed.com可能会重定向到http://www.arabseed.com/ar/home.html.
所以我的 PL/SQL 块应该接受第一个 URL 并返回第二个 URL。我在 Oracle API 中查看了@htp pkg,它对我没有多大帮助。
我需要更新部门 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) 我在 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) 我必须在 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 …
我有表交易表
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 行
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 toad 中有大约 1300 个存储过程。我想将每个存储过程保存到单独的脚本文件中,因为我需要将其更新到另一个数据库。如何执行此操作
我是 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)