标签: plsql

如何仅使 APEX ORACLE 中的表中的某些列可编辑

我正在尝试制作一个交互式网格,允许用户根据他们拥有的权限/特权来更新某些表。目前,APEX 中有一个可更新的表,但它允许用户编辑每一列。有没有办法不允许用户编辑 APEX ORACLE 中的某些列?谢谢

oracle plsql oracle-apex

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

如何使用 LISTAGG 和 Regexp_replace 获取不同的值

以下是我的查询:

SELECT LISTAGG(product_name, chr(10)) WITHIN GROUP (ORDER BY product_name) "Product_Listing"
FROM products;
Run Code Online (Sandbox Code Playgroud)

查询的输出是:

apple
orange
apple
mango
orange
banana
banana
apple
Run Code Online (Sandbox Code Playgroud)

所需的输出是:

apple
orange
mango
banana
Run Code Online (Sandbox Code Playgroud)

我如何使用 regexp_replace 来实现此目的?任何其他功能/想法。

提前致谢。

sql oracle plsql

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

PL/SQL %rowtype 变量声明表示内连接

在我的 PL/SQL 脚本中,当 JUSTIFIC_REC 表示联接时,如何声明它?

 SELECT * 
 INTO JUSTIFIC_REC
 FROM TABLE1 A  
 INNER JOIN TABLE2 B 
 ON A.ID_JUSTIFIC = B.ID_JUSTIFIC ;
Run Code Online (Sandbox Code Playgroud)

我想要的只是将一个串联行插入到 TABLE3 中:

 INSERT INTO MOF_OUTACCDTL_REQ VALUES(
    JUSTIFIC_rec.ENTRY_COMMENTS || '   ' || JUSTIFIC_rec.DESCRIPTION );
Run Code Online (Sandbox Code Playgroud)

我的脚本开头的 JUSTIFIC_REC 声明应该如何?

如果不是 INNER JOIN ,我会写类似: JUSTIFIC_rec TABLE1%ROWTYPE;

oracle plsql

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

包体内有两个同名但参数不同的函数是什么意思?

在包规范中,函数名称仅出现一次,因此它不会重载。在包体中,相同的函数名称使用不同的参数集出现两次。其中之一的参数与封装规格中的参数相同。我的问题是,包体中的“第一个 func”是否实际被调用,如果是,它到底在做什么?它正试图回归自己。

    --package specification
    CREATE OR REPLACE 
    PACKAGE jtestpkg
      IS
    FUNCTION testfunc(p_num IN NUMBER, p_out1 IN out varchar2, p_out2 IN out varchar2)
      RETURN NUMBER;
    END jtestpkg;

    --package body
    CREATE OR REPLACE 
    PACKAGE BODY jtestpkg
      IS
      --first func
      function testfunc
            (p_num IN NUMBER,
             p_out1 IN OUT varchar2) 
            return number is
                v_out2 varchar2(50);
      BEGIN
      dbms_output.put_line('invoking first func');
          RETURN testfunc(
              p_num,
              p_out1,
              v_out2);
      END;
      --second func
      FUNCTION testfunc(
                p_num IN NUMBER,
                p_out1 IN OUT varchar2,
                p_out2 IN OUT varchar2)
        RETURN NUMBER
        IS
        v_num …
Run Code Online (Sandbox Code Playgroud)

oracle plsql overloading plsql-package

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

如何使用 PL/SQL 循环 json 字符串?

我的示例仅返回BMW 2010. 我怎样才能让它AUDI 2000返回BMW 2010

declare
    sample_json   varchar2 (32767)
        := '

            [{"NAME":"AUDI","YEAR":"2000"},{"NAME":"BMW","YEAR":"2010"}]
';
begin
    apex_json.parse (sample_json);
    dbms_output.put_line (apex_json.get_varchar2 ('NAME'));
    dbms_output.put_line (apex_json.get_varchar2 ('YEAR'));
end;
Run Code Online (Sandbox Code Playgroud)

oracle plsql oracle12c

0
推荐指数
2
解决办法
5158
查看次数

PL/SQL:如何启用模式中的所有触发器?

我正在尝试创建一个使用游标的过程,该游标可以启用我的架构中的所有触发器。但是,我在第 16 行收到此错误:PL/SQL: SQL 语句被忽略,这是我使用 fetch 的行。

   CREATE OR REPLACE PROCEDURE enable_trigg_proc
   IS
    v_trigger_name trigger_name.user_triggers%TYPE;

    CURSOR enable_trigg_cur
    IS
    SELECT TRIGGER_NAME INTO v_trigger_name
    FROM user_triggers
    WHERE STATUS = 'DISABLED';


    BEGIN
     OPEN enable_trigg_cur;
    LOOP
     FETCH enable_trigg_cur INTO v_trigger_name ;
      EXIT WHEN enable_trigg_cur%NOTFOUND;

EXECUTE IMMEDIATE  'ALTER TRIGGER v_trigger_name  ENABLE';
    END LOOP;
  close enable_trigg_cur;
END;
Run Code Online (Sandbox Code Playgroud)

oracle plsql database-cursor

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

有什么办法可以阻止表更新吗?

正如标题所说,是否可以防止表中的数据被更新呢?我尝试使用以下触发器

CREATE OR REPLACE TRIGGER block_payment_update
BEFORE UPDATE ON payment  
DECLARE 
e_no_update_allowed EXCEPTION;
BEGIN
    RAISE e_no_update_allowed;
    EXCEPTION WHEN e_no_update_allowed THEN
    dbms_output.put_line('Updating PAYMENT table is not allowed');
END;
Run Code Online (Sandbox Code Playgroud)

我知道可以使用LOCK TABLE statementwith SHARE ROW EXCLUSIVE,但是它是否也有可能阻止向表中插入数据?

oracle plsql

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

如何正确调用包含动态 SQL 的 PL/SQL 函数?

我写了一个 PL/SQL 函数:-

CREATE OR REPLACE FUNCTION register_driver1(driver_name IN VARCHAR, pass_word IN VARCHAR) RETURN NUMBER AS
sql_stmt VARCHAR2(200);
driver_id NUMBER;
new_view_name VARCHAR(50);
BEGIN

    sql_stmt := 'CREATE USER '||driver_name||' identified by '||pass_word;

    EXECUTE IMMEDIATE sql_stmt;

    sql_stmt := 'grant create session to '||driver_name;

    EXECUTE IMMEDIATE sql_stmt;

    driver_id := driver_ids.nextval;
    new_view_name := 'vehicle_'||driver_name;

    sql_stmt := 'CREATE VIEW '||new_view_name|| ' AS SELECT Model, Seats, reg_no FROM Vehicle WHERE(d_id='||driver_id||')';

    EXECUTE IMMEDIATE sql_stmt;

    sql_stmt := 'CREATE OR REPLACE TRIGGER reg_vehicle 
                 INSTEAD OF INSERT ON '||new_view_name||
               ' …
Run Code Online (Sandbox Code Playgroud)

sql oracle plsql dynamic-sql

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

替换包中的过程 (Oracle 11+)

我使用过程成功创建了包和包主体。

CREATE OR REPLACE PACKAGE pack_test IS
  PROCEDURE proc_test();
END pack_test;

CREATE OR REPLACE PACKAGE BODY pack_test IS
  PROCEDURE proc_test() IS
    ...
  END proc_test;
END pack_test;
Run Code Online (Sandbox Code Playgroud)

但是当我尝试将此过程替换为:

CREATE OR REPLACE PROCEDURE pack_test.proc_test() IS
   ..... 
END pack_test.proc_test;
Run Code Online (Sandbox Code Playgroud)

我收到错误:

Error report - ORA-01031: Insufficient privileges
*Cause:    An attempt was made to perform a database operation without the necessary privileges
Run Code Online (Sandbox Code Playgroud)

但我已经授予 CREATE PROCEDURE (并且我成功创建了包 pack_test )。

我可以在不修改并重新提交整个包主体代码的情况下替换包中的过程吗?

sql oracle plsql

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

在 pl/sql 过程中处理 SharePoint URL 空格的正确方法

我正在尝试指定 SharePoint 位置的文件路径。例如,如果 URL 是这样的,那么处理 URL 中的空格的最佳方法是什么?

file_path_ varchar2(2000) := 'https://business123.sharepoint.com/sites/TEST/Private Documents/Export Test';
Run Code Online (Sandbox Code Playgroud)

原始 URL 在“私有”和“文档”以及“导出和测试”之间有 %20。我尝试过与 inside 串联|| '' ||并使用" "inside ' '。有没有办法从 SharePoint 生成不同的 URL?尝试写入文件夹位置的用户具有完全访问权限和权限,因此我知道不是这样,而是阻止我写入该文件夹。

有人有什么很酷的想法吗?提前谢谢了。

oracle url sharepoint plsql oracle12c

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