开发者

Oracle connection in SAS

I am using this oracle connection code in sas and getting this error:

ORACLE prepare error: ORA-06553: PLS-306: wrong number or types of arguments in call to 'get_pat_fix';

my code looks like this:

proc sql;
 connect to oracle(user='XXXXX'orapw='XXXXXX'path='');

  create table work.XXX as select * from connection to oracle (

        select to_char(yy.XXXX) as XXXXXX,
substr(get_pat_fix ('XX', yy.XXXX , 'XX','XX'),1,5)   XXXX,
from XXX;

I have tried to modify it several times but could not get it fixed. I would extremely开发者_运维问答 appreciate your help regarding the same.


"I didnt understand the get_pat_fix function explanation."

Browse the function in an IDE like TOAD or SQL Developer, or describe it in SQL*Plus like this:

SQL> desc validate_salary
FUNCTION validate_salary RETURNS VARCHAR2
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 P_CURRENT_SAL                  NUMBER                  IN
 P_RAISE_PCT                    NUMBER                  IN
 P_JOB                          VARCHAR2                IN
 P_HIREDATE                     DATE                    IN
 P_DEPTNO                       NUMBER                  IN     DEFAULT

SQL>

This shows you the number and datatype of the parameters. We must pass values for every paramater which doesn't have a default, and we must pass a variable for any OUT or IN OUT parameter. The passed values must match the datatype of the parameter.

Parameters can be passed by position...

SQL> select validate_salary (4000, 10, 'MGR', sysdate-720)
  2  from dual
  3  /

VALIDATE_SALARY(4000,10,'MGR',SYSDATE-720)
--------------------------------------------------------------
okay

SQL>

... or by named notation...

SQL> select validate_salary (p_current_sal=> e.sal
  2                              , p_hiredate=> e.hiredate
  3                              , p_deptno => e.deptno
  4                              , p_job => e.job
  5                              , p_raise_pct=> 10 )
  6  from emp e
  7  /

VALIDATE_SALARY(P_CURRENT_SAL=>E.SAL,P_HIREDATE=>E.HIREDATE,P_DEPTNO=>E.DEPTNO,P
--------------------------------------------------------------------------------
okay
okay
okay  
...

Either way, the parameters need to match:

SQL> select validate_salary (4000, 10, 'MGR')
  2  from dual
  3  /
select validate_salary (4000, 10, 'MGR')
       *
ERROR at line 1:
ORA-06553: PLS-306: wrong number or types of arguments in call to
'VALIDATE_SALARY'

SQL> select validate_salary (4000, 'MGR', sysdate-720, 40)
  2  from dual
  3  /
select validate_salary (4000, 'MGR', sysdate-720, 40)
       *
ERROR at line 1:
ORA-06553: PLS-306: wrong number or types of arguments in call to
'VALIDATE_SALARY'


SQL> 

Of course, I missed out the most obvious answer: consult your application's documentation, which will have a detailed description of the GET_PAT_FIX() function including its signature. :-D Sorry, thought I could keep a straight face while I typed that.

Alas, in the real world too many of us have to struggle along without decent documentation for our apps. So we have to interrogate the database schema. I don't think there are any SAS tools for doing this (the ones Google throws up all seem to be just data browsers). So that means you'll need a database tool. I'm going to suggest Oracle's SQL Developer not because it's the best (that's a matter of taste) but because it is free, and it works. Find it here.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜