我是 ORDS 的新手。我正在使用 APEX_JSON 为源类型为 PL/SQL 的其他服务之一创建一个 json 对象。我正在创建的 json 对象很复杂。如果在创建 json 对象时有任何事情失败,那么我必须返回一个错误,该错误在正文中具有不同的 json 结构。因此,在为错误创建主体之前,我想清除到目前为止我创建的 json。我怎样才能做到这一点。或者有没有其他方法可以实现这一点。
PROCEDURE GETNODES(I_LOCATION IN NUMBER)
V_STATUS NUMBER;
BEGIN
APEX_JSON.OPEN_OBJECT;
APEX_JSON.OPEN_ARRAY('NODES');
FOR nodes in (select NAME FROM NODES where location = I_LOCATION) LOOP
APEX_JSON.OPEN_OBJECT;
APEX_JSON.write('NAME',nodes.name);
V_STATUS := getnodestatus(nodes.name); --This can throw an exception
APEX_JSON.write('STATUS',V_STATUS);
APEX_JSON.CLOSE_OBJECT;
END LOOP;
APEX_JSON.CLOSE_ARRAY;
APEX_JSON.CLOSE_OBJECT;
EXCEPTION WHEN OTHERS THEN
--IF I get any error, then I have to write a different json, so I have to clear the json written till now, …Run Code Online (Sandbox Code Playgroud) 我正在尝试在 Oracle 中使用 LEFT JOIN 连接两个表。我只需要包含“正确”连接表中的第一条记录。
请参阅下面的示例:
表A
code | emp_no
101 | 11111
102 | 22222
103 | 33333
104 | 44444
105 | 55555
Run Code Online (Sandbox Code Playgroud)
表B
code | city | county
101 | City1 | Country1
101 | City2 | Country1
101 | City3 | Country1
102 | City4 | Country2
103 | City5 | Country3
Run Code Online (Sandbox Code Playgroud)
预期输出:
code | emp_no | city | county
101 | 11111 | City1 | Country1
102 | 22222 | City4 | Country2
103 …Run Code Online (Sandbox Code Playgroud) 为什么我们需要WHERE CURRENT OFin 子句Oracle PL/SQL?我们都知道FETCH一次只检索一行,因此FETCH用于LOOP处理游标的所有行。那为什么我们只需要一个WHERE CURRENT OF子句呢?无论如何,我们可以使用FOR UPDATE或锁定游标行FOR UPDATE OF。
一旦我们关闭游标,行是否可以解锁(被FOR UPDATE或锁定FOR UPDATE OF)?或者我们是否需要COMMIT或ROLLBACK交易来解锁行?
我在oracle SQL developer的一个模式中有很多过程和函数,我想知道如何用标准格式编译所有过程和函数(之后它们都具有相同的格式,就像手动按Ctrl + F7一样)在oracle SQL 开发人员自动?
我在我的 oracle 数据库上创建了一个目录:示例:
CREATE DIRECTORY execdir AS 'ABXD/EFGH';
grant execute on directory execdir to public;
Run Code Online (Sandbox Code Playgroud)
现在,我的 bat 文件放在网络驱动器上,它是:
//ABXD/EFGH
Run Code Online (Sandbox Code Playgroud)
注意:ABXD 已经挂载在 oracle 数据库中
我的 bat 文件名如下:sample.bat
bat文件内容:
@echo off
pushd //ABXD/EFGH
FOR /f %%i IN ('dir /o:-d /b') DO (set LAST=%%i)
ren %LAST% data_1.jpg
popd
Run Code Online (Sandbox Code Playgroud) 我正在写一个sql语句。看起来像这样
select case when c.used = 1 then 'Used'
else 'Unused'
end
from my_table
Run Code Online (Sandbox Code Playgroud)
如何使用as关键字命名 col 。我在字符串之后和end. 什么都行不通。
请帮我。谢谢 :)
我有一个程序可以进行验证并在表中插入一条记录。INSERT当我尝试以下代码时,该过程在语句之后立即中断:
EXECUTE IMMEDIATE V_SOME_STRNG || ' returning SOME_ID into :NEW_ID' returning into V_TRGT_ID;
Run Code Online (Sandbox Code Playgroud)
我正在尝试执行INSERT存储在中的语句V_SOME_STRNG并将新记录的 ID 分配给V_TRGT_ID. 但是,我遇到了以下错误:
ORA-00933: SQL 命令未正确结束
有什么想法吗?
我正在使用 Oracle APEX,并且正在尝试在 PL/SQL 函数体中存储动态 sql 查询。这是我当前对经典报告的 SQL 查询:
SELECT
RELEASE,
COUNT(*) as "Total Tests", --total
SUM(CASE WHEN TYPE = 'P1' THEN 1 ELSE 0 END) as "P1",
SUM(CASE WHEN TYPE = 'P2' THEN 1 ELSE 0 END) as "P2",
SUM(CASE WHEN TYPE = 'P3' THEN 1 ELSE 0 END) as "P3",
SUM(CASE WHEN TYPE = 'P4' THEN 1 ELSE 0 END) as "P4"
FROM TABLENAME
group by RELEASE
ORDER BY case
when RELEASE = '19.3' then 1
when RELEASE …Run Code Online (Sandbox Code Playgroud) 我目前正在做一个学校项目,我们需要为一家房地产管理公司创建一个数据库。我们有一张OWNER桌子,一张BUILDING桌子和一张OWNERSHIP桌子。
我想确保当我输入所有权股份百分比值时,来自不同所有者的所有所有权股份的总和不超过 100%。目前我不知道如何做到这一点。
CREATE TABLE Building (
buildingID NUMBER (10) NOT NULL PRIMARY KEY,
qtyUnits NUMBER (3) NOT NULL,
landValue NUMBER (15) NOT NULL,
purchasePrice NUMBER (15) NOT NULL
);
CREATE TABLE Owners (
ownerID NUMBER (5) NOT NULL PRIMARY KEY,
lastName VARCHAR2 (50) NOT NULL,
firstName VARCHAR2 (50) NOT NULL,
telephone VARCHAR2(50) NOT NULL,
email VARCHAR2(10) NOT NULL
);
CREATE TABLE Ownership (
ownerID NUMBER (5) NOT NULL,
buildingID NUMBER (5) NOT NULL, …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用游标编写一个简单的查询,但是我不断收到这个臭名昭著的“无效游标”错误。这是我的代码。
DECLARE
v_deptno NUMBER := 10;
c_last_name employees.last_name%TYPE;
c_salary employees.salary%TYPE;
c_manager_id employees.salary%TYPE;
CURSOR c_emp_cursor IS
SELECT last_name, salary, manager_id FROM employees
WHERE department_id = v_deptno;
BEGIN
--OPEN c_emp_cursor;
-- commented out because for loop opens the cursor automatically
FOR employee IN c_emp_cursor
LOOP
FETCH c_emp_cursor INTO c_last_name, c_salary, c_manager_id;
EXIT WHEN c_emp_cursor%NOTFOUND;
IF c_salary < 5000 THEN
IF c_manager_id = 101 OR c_manager_id = 124 THEN
dbms_output.put_line(c_last_name || 'due for a raise.');
ELSE
dbms_output.put_line(c_last_name || ' not due for a …Run Code Online (Sandbox Code Playgroud)