标签: plsql

如何从postgreSQL函数中的字符串变量中修剪双引号

我在 postgreSQL 中有一个函数,我的函数参数之一是文本类型变量,用双引号括起来,所以我想将此变量插入到表中而不用双引号,当我在网上搜索时,我得到了一个类似的查询, SELECT trim(both ' ' from 'techonthenet.com'); 但是这在双引号的情况下不起作用,所以我将如何从 postgreSQL 函数中的文本字符串变量中删除双引号

sql postgresql plsql

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

PL/SQL:从没有循环的 select 语句生成 CSV varchar

使用 PL/SQL,我希望从 select 语句中以编程方式生成 CSV 字符串/varchar 对象。所以 select 语句的输出通常是 1-n 条记录(我只需要一列)。但关键是,我不能使用循环或任何迭代过程,而且必须在不使用外部库的情况下完成。

我可以自由地将数据转换为表格或不同的数据类型,并在需要时使用更多内存。但我不能明确使用循环。

我想我正在寻找一种方法来做这样的事情:

declare
   my_csv varchar2(4000);
begin
   select implode(my_column,',') into my_csv
   from my_table
   where some_column = 'some value';

   dbms_output.put_line('I got my list: ' || my_csv);
end;
Run Code Online (Sandbox Code Playgroud)

本质上,内理论上会像 PHP 内爆函数一样工作,而“,”逗号是我的分隔符。我可以自己定义内爆函数,但同样,我不能明确使用循环。

有任何想法吗?

csv plsql varchar2

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

将条件附加到 where 子句(pl/sql),其中条件作为输入 varchar2

我有一个 Employee 表,我需要根据某种条件知道员工的数量,该条件将采用 varchar2 的形式

请忽略任何语法错误

procedure getEmpCount( pCondition in varchar2)
begin
    --pCondition can be anything say "employee_salaray >30000"

    select count(*) from Employee where employee_age > 35 and **pCondition**

end
Run Code Online (Sandbox Code Playgroud)

我怎样才能使上述查询工作。提前致谢

sql oracle plsql where-clause

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

Oracle DBMS_UTILITY.GET_TIME

Question : 为什么我们将差异除以 100 以获得以秒为单位的时间?

Start
Get current time(Start Time)
Perform logical transaction
Get current time(End Time)
Subtract End Time – Start Time
Divide it by 100 to get total time in seconds. (Why 100?)
Stop
Run Code Online (Sandbox Code Playgroud)

试试下面的代码

declare START_TIME PLS_INTEGER;
begin

    START_TIME := DBMS_UTILITY.GET_TIME;
    DBMS_OUTPUT.PUT_LINE('START_TIME-->'|| START_TIME);

    dbms_lock.sleep(10);
    DBMS_OUTPUT.PUT_LINE('DBMS_UTILITY.GET_TIME-->'|| DBMS_UTILITY.GET_TIME);
    DBMS_OUTPUT.PUT_LINE('execution time --> ' || (dbms_utility.get_time - start_time)/100);
end;
Run Code Online (Sandbox Code Playgroud)

oracle datetime plsql date oracle12c

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

Oracle PLSQL:两个不同数据库的不同行为

我自己写了一个小的 PL/SQL 实用程序。对一个数据库(我的 Windows 10 笔记本电脑上的 Oracle XE 安装)执行它(使用 SQL-Developer)它工作得很好,但是对另一个数据库(也是 Oracle XE,但在 Linux 服务器上)执行它我收到编译错误我的剧本!?!?怎么可能?

我得到的错误是:

ORA-06550: line 17, column 35:
PLS-00491: numeric literal required
ORA-06550: line 18, column 35:
PLS-00491: numeric literal required
ORA-06550: line 19, column 35:
PLS-00491: numeric literal required
ORA-06550: line 20, column 35:
PLS-00491: numeric literal required
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.
Run Code Online (Sandbox Code Playgroud)

引用的位置在我的脚本开头的本节中:

DECLARE
    -- limits and boundaries    
    MAX_NAME_LENGTH         CONSTANT NUMBER(3)          := 30; -- for table and column …
Run Code Online (Sandbox Code Playgroud)

oracle plsql

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

PL Sql 分层分支总和

我有这张桌子。只有明细表获得价值;我想得到分支的总和。

ACCOUNT         Value             
---------- ------------- 
100                           
100-01                    
100-01-01                 
100-01-01-001     7       
100-01-01-006     6       
100-01-01-271     5       
100-02            
100-02-01-001     1       
100-02-01-006     2       
100-02-01-271     3    
Run Code Online (Sandbox Code Playgroud)

喜欢

ACCOUNT         Value             
---------- ------------- 
100               24 -- (sum of 100%)            
100-01            18 --  (sum of 100-01%)        
100-01-01         18 --(sum of 100-01-01%)        
100-01-01-001      7       
100-01-01-006      6       
100-01-01-271      5       
100-02             6 -- (sum of 100-02%)
100-02-01-001      1       
100-02-01-006      2       
100-02-01-271      3  
Run Code Online (Sandbox Code Playgroud)

我尝试通过 and 进行 sum 并尝试 sum(value) where account like account||'-%' 但不能结束

oracle plsql

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

插入到不在 oracle 中的 plsql 上工作

declare
vquery long;
cursor c1 is
select * from temp_name;

begin

for i in c1
loop
vquery :='INSERT INTO ot.temp_new(id)
select '''||i.id||''' from ot.customers';
dbms_output.put_line(i.id);
end loop;

end;
/
Run Code Online (Sandbox Code Playgroud)

的输出select * from temp_name是:

ID                                                                              
--------------------------------------------------------------------------------
customer_id                                                                     
1 row selected.
Run Code Online (Sandbox Code Playgroud)

我有包含 customer_id 列的客户表。我想将所有 customer_id 插入到 temp_new 表中,但它没有被插入。PLSQL 块成功执行,但 temp_new 表为空。的输出dbms_output.put_line(i.id);

customer_id
Run Code Online (Sandbox Code Playgroud)

有什么问题吗?

oracle plsql oracle11g

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

删除重复项触发 Oracle

如果我使用相同的 cod_regista 插入多于一行,它会创建重复项,我该如何消除它们?每个值我只需要一个记录

CREATE OR REPLACE TRIGGER piazzetta_trg
BEFORE INSERT OR UPDATE
ON regia_piazzetta
FOR EACH ROW
BEGIN
IF INSERTING THEN
     FOR a IN(SELECT cod_regista, SUM(costo_produzione) as tot
              FROM regia_piazzetta
              GROUP BY cod_regista)
        LOOP     
            INSERT INTO piazzetta_tot VALUES (a.cod_regista, a.tot);
        END LOOP;
    UPDATE piazzetta_tot SET costo_totale = costo_totale + :new.costo_produzione WHERE piazzetta_tot.id_regista = :new.cod_regista;
END IF;
IF UPDATING THEN 
    UPDATE piazzetta_tot SET costo_totale = costo_totale+(:new.costo_produzione - :old.costo_produzione) WHERE piazzetta_tot.id_regista = :new.cod_regista;
  END IF;
END;
Run Code Online (Sandbox Code Playgroud)

sql oracle plsql plsqldeveloper oracle-sqldeveloper

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

是否有没有输入但返回某些内容的函数

CREATE OR REPLACE FUNCTION FN_MULTAS_TOTAL 
RETURN INTEGER
IS 
V_TOTAL INT;
BEGIN 
SELECT SUM(MULTA)
INTO V_TOTAL
FROM DETALLE_ARRIENDO;
RETURN V_TOTAL;
END;
Run Code Online (Sandbox Code Playgroud)

我正在开发 SQL Developer 11,我必须用

exec FN_MULTAS_TOTAL; 
Run Code Online (Sandbox Code Playgroud)

并获得一个整数值

sql oracle plsql oracle-sqldeveloper

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

PLS-00103:在预期以下情况之一时遇到符号“ON”

请注意:我尝试过其他堆栈溢出问题,但没有解决我的问题......

我收到此错误:PLS-00103: Encountered the symbol "ON" when expecting one of the following使用以下代码:


SET SERVEROUTPUT ON;

DECLARE
    v_province         VARCHAR(4) := &province;
    v_numberOfVisits   NUMBER;
    v_totallaborcost   NUMBER;
BEGIN
    findvisitsandlaborcost(v_numberofvisits, v_totallaborcost, v_province);
    dbms_output.put_line('Number of visits for province '
                         || v_province
                         || ': '
                         || v_numberofvisits);
    dbms_output.put_line('Total labor cost for province '
                         || v_province
                         || ': '
                         || v_totallaborcost);
END;
/
Run Code Online (Sandbox Code Playgroud)

findvisitsandlaborcost定义:

CREATE OR REPLACE PROCEDURE findvisitsandlaborcost (
    numberofvisits   OUT   NUMBER,
    totallaborcost   OUT   NUMBER,
    province         VARCHAR
) AS
    v_numberofvisits   si.servinv.servinvno%TYPE;
    v_totallaborcost   si.servinv.laborcost%TYPE; …
Run Code Online (Sandbox Code Playgroud)

oracle plsql compiler-errors

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