标签: plsql

如何清除APEX_JSON写入的json对象

我是 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)

json plsql oracle11g oracle-apex oracle-apex-5.1

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

PL-SQL - 一对多关系左连接中的第一条记录

我正在尝试在 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)

oracle plsql join left-join

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

PL/SQL 中的当前位置

  1. 为什么我们需要WHERE CURRENT OFin 子句Oracle PL/SQL?我们都知道FETCH一次只检索一行,因此FETCH用于LOOP处理游标的所有行。那为什么我们只需要一个WHERE CURRENT OF子句呢?无论如何,我们可以使用FOR UPDATE或锁定游标行FOR UPDATE OF。

  2. 一旦我们关闭游标,行是否可以解锁(被FOR UPDATE或锁定FOR UPDATE OF)?或者我们是否需要COMMIT或ROLLBACK交易来解锁行?

oracle plsql cursor

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

如何在oracle sql developer中以标准格式编译所有程序

我在oracle SQL developer的一个模式中有很多过程和函数,我想知道如何用标准格式编译所有过程和函数(之后它们都具有相同的格式,就像手动按Ctrl + F7一样)在oracle SQL 开发人员自动?

oracle plsql oracle-sqldeveloper

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

如何从我的 oracle pl sql 程序运行 bat 文件

我在我的 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)

oracle plsql batch-file

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

SQL 选择大小写为

我正在写一个sql语句。看起来像这样

select case when c.used = 1 then 'Used'
            else 'Unused'
       end
from my_table
Run Code Online (Sandbox Code Playgroud)

如何使用as关键字命名 col 。我在字符串之后和end. 什么都行不通。

请帮我。谢谢 :)

mysql sql database plsql

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

Oracle:使用 EXECUTE IMMEDIATE 和 RETURNING INTO

我有一个程序可以进行验证并在表中插入一条记录。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 plsql

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

使用 PL/SQL 函数体返回 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)

sql oracle plsql oracle-apex

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

如何在 Oracle SQL 中添加检查总和的约束?

我目前正在做一个学校项目,我们需要为一家房地产管理公司创建一个数据库。我们有一张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)

sql oracle plsql

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

ORA-01001: 使用 'for' 循环的查询中的无效游标

我正在尝试使用游标编写一个简单的查询,但是我不断收到这个臭名昭著的“无效游标”错误。这是我的代码。

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)

oracle plsql

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