执行此操作后,我收到以下信息:
PL/SQL: ORA-00942: table or view does not exist
PLS-00364: loop index variable 'EMP_REC' use is invalid
Run Code Online (Sandbox Code Playgroud)
据说:
在块或子程序中,当您输入块或子程序时,将实例化用户定义的记录。当您退出块子程序时,它们将不再存在。”
现在我想我完全理解它在说什么,我想......但是话虽如此,我的 FOR 部分是否应该正常工作?(为什么不是?),因为正如我所看到的,整个事情发生在街区内而不是外面。因此,直到块退出之前,我认为 v_myrec 存在于 Oracle 服务器默认分配的私有内存的缓存或缓冲区中,因为毕竟 v_myrec 可以说是一个“表”,因此 DBMS 包应该能够打印我的“emp_rec.v_sal...”,在我的块执行成功完成后,然后 v_myrec 不再存在。我在这里有点困惑,有人能给我解释一下吗?
如果我全都错了,请纠正我。v
DECLARE
TYPE t_rec IS RECORD
(v_sal NUMBER(8) NOT NULL := 0,
v_min_sal NUMBER(8) DEFAULT 1000,
v_hire_date employees.hire_date%TYPE,
v_rec1 employees%ROWTYPE);
v_myrec t_rec;
BEGIN
v_myrec.v_sal := v_myrec.v_min_sal + 500;
v_myrec.v_hire_date := SYSDATE;
SELECT *
INTO v_myrec.v_rec1
FROM employees
WHERE employee_id = 100;
DBMS_OUTPUT.PUT_LINE(v_myrec.v_rec1.last_name||' '||v_myrec.v_sal||
' '||v_myrec.v_rec1.salary);
FOR emp_rec IN …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个 PL/SQL 过程,它将通过 SQL 查询来获取结果。但要求是 order by 可以是动态的,主要是为了对屏幕中的列进行排序。我向此过程传递 2 个参数 - in_sort_column 和 in_sort_order。要求在文本列上按 ASC 排序,而在数字列上按 DESC 排序。我的查询看起来像这样,没有添加 in_sort_order -
SELECT col1, col2, col3 from tabl e1 where col1 > 1000
ORDER BY decode(in_sort_column,'col1', col1, 'col2', col2, 'col3', col3);
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚在这种情况下如何使用 in_sort_order 参数。以前做过这个的人可以帮忙吗?
谢谢
我想获取字符串的子字符串,例如: filename_ip_time.pdf 我想选择 filename_ip,即最后一次出现“_”之前的字符串
通常,我使用以下结构发送内容为 varchar2 和数字..等的 POST 请求。
content := '{"Original File Name":"'||V_HOMEBANNER_1_EN_NAME(indx)||'"}';
url := 'https://api.appery.io/rest/1/db/Names';
req := utl_http.begin_request(url, 'POST',' HTTP/1.1');
UTL_HTTP.set_header(req, 'X-Appery-Database-Id', '5f2dac54b02cc6402dbe');
utl_http.set_header(req, 'content-type', 'application/json');
UTL_HTTP.set_header(req, 'X-Appery-Session-Token', sessionToken);
utl_http.set_header(req, 'Content-Length', LENGTH(content));
utl_http.write_text(req, content);
res := utl_http.get_response(req);
BEGIN
LOOP
utl_http.read_line(res, buffer);
END LOOP;
utl_http.end_response(res);
EXCEPTION
WHEN utl_http.end_of_body THEN
utl_http.end_response(res);
END;
Run Code Online (Sandbox Code Playgroud)
而且效果很好。但是,现在我想将 blob 文件(jpg 图像)发送/上传到一些名为“Files”的 MongoDB 集合中(因此 url := ttps://api.appery.io/rest/1/db/Files)。收集指南有以下 cURL 作为一般建议:
curl -X POST \
-H "X-Appery-Database-Id: 5f2dac54b02cc6402dbe" \
-H "X-Appery-Session-Token: <session_token>" \
-H "Content-Type: <content_type>" \
--data-binary '<file_content>' \
https://api.appery.io/rest/1/db/files/<file_name>
Run Code Online (Sandbox Code Playgroud)
但我无法将此 …
我在创建过程和包时遇到错误。请任何人帮助我。
我的程序代码-
CREATE OR REPLACE PROCEDURE IPROC(CID IN NUMBER, CNAME IN VARCHAR2, CON IN NUMBER, A_NO IN NUMBER, BAL IN NUMBER, TTYPE VARCHAR2)
AS
BEGIN
INSERT INTO CUSTOMER_TBL VALUES(CID,CNAME,CON,A_NO,BAL,TTYPE);
END;
Run Code Online (Sandbox Code Playgroud)
错误-
Error report -
ORA-00604: error occurred at recursive SQL level 1
ORA-01653: unable to extend table SYS.PLSCOPE_ACTION$ by 128 in tablespace SYSAUX
00604. 00000 - "error occurred at recursive SQL level %s"
*Cause: An error occurred while processing a recursive SQL statement
(a statement applying to internal dictionary tables). …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个 pl/sql 函数(我第一次使用 pl/sql 函数),它将 10 进制数字转换为 26 进制字符串(我的 26 进制将是 A..Z)。
create or replace function generateId(numericId IN NUMBER) RETURN VARCHAR2 AS
declare
type array_t is varray(26) of CHAR;
char_array array_t := array_t('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z');
res varchar2(3);
targetBase INTEGER := char_array.count;
begin
LOOP
res = char_array[REMAINDER(numericId, targetBase)] + result;
numericId = numericId / targetBase;
EXIT WHEN (numericId …Run Code Online (Sandbox Code Playgroud) 是否可以使用立即执行来限制批量收集?
我有下面的脚本,但在使用 LIMIT 时出现错误。
declare
v_query varchar2(3000);
begin
v_query := 'select 1 from dual' -- this is just a sample query.
execute immediate v_query
bulk collect into table1 --table type
end;
Run Code Online (Sandbox Code Playgroud)
如果我的代码无法实现限制,有什么解决方法吗?
谢谢!
有人可以解释一下 PL/SQL 中条件编译的概念吗?我已经研究过,但不太明白使用它背后的原因以及它的实际作用。举个例子就太好了!
另外,我想了解更多有关条件编译控制令牌的信息。PL/SQL 中的令牌是什么?
预先感谢您的帮助。
我编写了一段代码在 oracle 中创建过程,它已成功创建,但是当从 sql Developer 运行以查看输出时,它显示错误。
ORA-01422: exact fetch returns more than requested number of rows
ORA-06512: at "TESTUSER.USER_FEEDBACK", line 5
ORA-06512: at line 2
Run Code Online (Sandbox Code Playgroud)
代码:
create or replace PROCEDURE user_feedback
IS
initiator VARCHAR2(50);
BEGIN
select first_name into initiator
from person_info;
END ;
Run Code Online (Sandbox Code Playgroud)
请建议我。
FOR rec IN ( SELECT Procedure_Name
FROM DATAMART_PROCESS_STEPS
ORDER BY Procedure_Order )
LOOP
EXECUTE rec;
END LOOP;
Run Code Online (Sandbox Code Playgroud)
我有一个过程管理表中的一系列过程DATAMART_PROCESS_STEPS,并且我需要动态运行该表中的每个过程。Oracle SQL Developer 不喜欢我执行过程的方式;它会抛出语法错误。完成这项任务的正确方法是什么?
EXECUTE 'BEGIN ' || rec || '; END';
Run Code Online (Sandbox Code Playgroud)
在阅读有关存储过程的教程后,我也尝试过此操作,但它存在单引号问题。帮助。如果您需要更多详细信息或代码,请询问。
先感谢您。