我有一个 pl/sql 过程,如下所述
CREATE OR REPLACE PROCEDURE add_affectedCircle
(v_affected_circle IN v_circle.circle_code%type)
IS
v_circle_id NUMBER;
BEGIN
v_circle_id := get_circleID(v_affected_circle);
INSERT INTO vf_affected_circle (affected_circle)
values (v_circle_id);
EXCEPTION
WHEN OTHERS THEN
RAISE_APPLICATION_ERROR (-20101, 'Problem in loading Affected Circle data');
END;
/
Run Code Online (Sandbox Code Playgroud)
首先,我使用函数 get_circleID 检查 vf_circle 表中的circle_code 列中可用的特定数据 v_affected_circle 并返回与circle_code 关联的circle_id。
CREATE OR REPLACE FUNCTION get_circleID
( v_circle_code vf_circle.circle_code%TYPE)
RETURN vf_circle.circle_id%TYPE
IS
return_value vf_circle.circle_id%TYPE;
BEGIN
BEGIN
SELECT circle_id INTO return_value
FROM vf_circle
WHERE circle_code = v_circle_code;
END;
RETURN return_value;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RAISE_APPLICATION_ERROR(-20102, …Run Code Online (Sandbox Code Playgroud) 我正在尝试从报告页面到表单页面检索客户 id pk 列,每当用户使用 oracle applicationexpress 从报告页面移动到表单页面时,该列就会自动递增。所以我正在尝试创建一个返回 a 的触发器具有最后一行的值以及 +1 增量的数字。但是我收到这个错误
Error at line 8: PLS-00103: Encountered the symbol "(" when expecting one of the following:
, from
6. INTO number
7. FROM (SELECT a.cust_id, max(cust_id) over() as max_pk FROM customer a)
8. WHERE cust_id = max_pk;
9. number:=(cust_id+1);
10. END;
Run Code Online (Sandbox Code Playgroud)
这是我的 PL/SQL 过程。
CREATE OR REPLACE FUNCTION cust_id_incremental(cust_id IN number)
RETURN number;
BEGIN
SELECT cust_id
INTO number
FROM (SELECT a.cust_id, max(cust_id) over() as max_pk FROM customer a)
WHERE cust_id …Run Code Online (Sandbox Code Playgroud) 我有一个存储过程,可以使用 UTL 函数将 CSV 数据插入到 oracle 表中。我遇到困难的部分是当我在regexp_substr插入目标表之前必须使用时。我浏览了regexp_substr各种网站,但仍然不太掌握如何将其应用到这个特定导入程序的概念。
例如,假设我们有以下几行代码:
V_EMPNO := REGEXP_SUBSTR(V_LINE, '[^,]+', 1, 1);
V_ENAME := REGEXP_SUBSTR(V_LINE, '[^,]+', 1, 2);
Run Code Online (Sandbox Code Playgroud)
我的直率问题是,有人可以向我解释一下这条线的逻辑是如何工作的吗?我有一个 CSV 文件和包含 75 个字段的目标表,所以这当然只是一个样本,我知道我已经把这一部分写得很长了。我假设字符串的最后一部分只是行号,所以我不断增加它。
我的另一个问题是,我是否应该继续将所有记录定义为变量,并对regexp_substr属于导入一部分的所有字段单独执行操作?
我有问题动态调用存储过程
\n\n v_sql := 'begin '|| p_procname || '(''test1'','' test2 '',:v_output2); end;';\n execute immediate v_sql\n using out v_output2 ;\n dbms_output.put_line(v_output2 || ' ' );\nRun Code Online (Sandbox Code Playgroud)\n\n在这里 \xc4\xb1 可以调用立即执行的过程。\n但我的问题是动态绑定变量。该值来自日志表,然后我解析execute_immediate 过程
\n\n v_sql := 'begin '|| p_procname || '(''test1'','' test2'',:v_output2); end;';\n v_sql1:= ||using|| 'out v_output2 ' ;\n\n execute immediate v_sql\n v_sql1;\nRun Code Online (Sandbox Code Playgroud)\n\n它不是那样工作的。我如何使动态变量绑定,因为我调用了很多过程,并且该过程具有不同的输入和输出参数。\n我希望你能理解我遇到的问题。我该如何解决这个问题,谢谢
\n我想读取文本文件,将其存储在变量中并在 pl/sql 中输出该变量。我正在使用以下代码,但出现错误:语句被忽略。
create or replace PROCEDURE blah
AS
DECLARE
f UTL_FILE.FILE_TYPE;
s VARCHAR2(200);
BEGIN
f := UTL_FILE.FOPEN('C:\Users\s420105\Music','blahh.txt','R');
UTL_FILE.GET_LINE(f,s);
UTL_FILE.FCLOSE(f);
dbms_output.put_line(s);
END;
Run Code Online (Sandbox Code Playgroud)
我不确定 UTL 权限,但我想如果是由于 UTL 权限,它会抛出不同的错误。这
我正在尝试计算架构中每个表的数量。
SET serveroutput ON;
BEGIN
FOR I IN (SELECT TABLE_NAME FROM USER_TABLES) LOOP
FOR J IN (SELECT COUNT(1) CNT FROM I.TABLE_NAME) LOOP
DBMS_OUTPUT.PUT_LINE(I.TABLE_NAME||'>>'||J.CNT);
END LOOP;
END LOOP;
END;
/
Run Code Online (Sandbox Code Playgroud)
但我遇到这样的错误。
Error report:
ORA-06550: line 3, COLUMN 37:
PL/SQL: ORA-00942: TABLE OR VIEW does NOT exist
ORA-06550: line 3, COLUMN 10:
PL/SQL: SQL Statement ignored
ORA-06550: line 4, COLUMN 42:
PLS-00364: loop INDEX variable 'J' USE IS invalid
ORA-06550: line 4, COLUMN 1:
PL/SQL: Statement ignored
Run Code Online (Sandbox Code Playgroud)
sql查询本身可以实现吗?/
我需要从行类型变量获取特定的列值。我的示例代码是
declare
col_name varchar2(100);
col_val varchar2(100);
TYPE column_table_type IS TABLE OF COLUMN_TABLE%ROWTYPE;
column_table column_table_type ;
begin
SELECT * BULK COLLECT INTO column_table FROM COLUMN_TABLE;
for data_table in (select * from DATA_TABLE)
loop
for i in column_table.first .. column_table.count
loop
col_name=column_table(i).COLUMN_NAME;
/*
How to get the col_val for col_name from the data_table with out extra query.
*/
end loop;
end loop
end;
/
Run Code Online (Sandbox Code Playgroud)
列_表:
COLUMN_NAME
----------------
emp_name
emp_id
emp_addr
Run Code Online (Sandbox Code Playgroud)
数据表:
emp_name emp_id emp_addr
----------------------------
A 1 aaaa
B 2 bbbb
C …Run Code Online (Sandbox Code Playgroud) 这是我的功能:
FUNCTION GET(V_IN IN NUMBER) RETURN VARCHAR2 AS
V_OUT VARCHAR2(1000);
BEGIN
function body
END;
Run Code Online (Sandbox Code Playgroud)
当我右键单击该函数并单击测试时,我得到以下信息:
begin
-- Call the function
:result := pkg.get(V_IN => :V_IN);
end;
Run Code Online (Sandbox Code Playgroud)
如何替换该变量 V_IN 的值?我需要测试一个数字,比如 940。
当我尝试代码时:
declare
r varchar2(2000);
begin
-- Call the function
r := pkg.get(940);
end;
Run Code Online (Sandbox Code Playgroud)
我收到错误:
ORA-01036: illegal variable name/number
Run Code Online (Sandbox Code Playgroud)
您能建议调用此函数的各种方法吗?
PS:使用的工具:PL/SQL Developer Allround Automations。版本8.0.1.1502
Oracle 数据库 11g 企业版
我需要在 Oracle 中将数据从 CLOB 转换为 UTF8 编码的 BLOB。我该怎么做?
我有一个存储过程来截断表,该表的名称作为参数传递给该过程。
create or replace procedure delete_data_from_table(table_id VARCHAR2)
is
cursor table_cur is
SELECT table_name FROM all_tables WHERE table_name LIKE '%' || table_id || '%';
tab_name VARCHAR2(25);
BEGIN
open table_cur;
LOOP
FETCH table_cur into tab_name;
exit when table_cur%notfound;
EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || tab_name;
END LOOP;
close table_cur;
END;
Run Code Online (Sandbox Code Playgroud)
execute immediate我想使用显示语句的输出DBMS_OUTPUT.PUT_LINE。可以这样做吗?
提前致谢。