Question

Can't find the cause of the PL/SQL Compilation Error

Asked by: geeta_m9

When I compile the following package, I get the following compilation error, but I can't determine what is causing the error. Please help!

Warning: Package Body created with compilation errors.

09:37:34 PPRD> show errors
Errors for PACKAGE BODY EXPORT_TOOL:

LINE/COL ERROR
-------- -----------------------------------------------------------------
32/46    PLS-00103: Encountered the symbol "(" when expecting one of the
         following:
         := . ) , @ % default character
         The symbol ":=" was substituted for "(" to continue.

32/74    PLS-00103: Encountered the symbol "(" when expecting one of the
         following:
         := . ) , @ % default character
         The symbol ":=" was substituted for "(" to continue.

64/45    PLS-00103: Encountered the symbol "(" when expecting one of the

LINE/COL ERROR
-------- -----------------------------------------------------------------
         following:
         := . ) , @ % default character
         The symbol ":=" was substituted for "(" to continue.

64/73    PLS-00103: Encountered the symbol "(" when expecting one of the
         following:
         := . ) , @ % default character
         The symbol ":=" was substituted for "(" to continue.

set scan off
 
CREATE OR REPLACE PACKAGE export_tool AS
 
  FUNCTION get_prereq(p_subj_code in VARCHAR2(20),P_crse_numb in VARCHAR2(20)) RETURN clob;
  FUNCTION get_coreq(p_subj_code in VARCHAR2(20),P_crse_numb in VARCHAR2(20)) RETURN clob;
  PROCEDURE p_print_data;
 
END export_tool;
/
show errors
 
WHENEVER SQLERROR CONTINUE
DROP PUBLIC SYNONYM export_tool;
WHENEVER SQLERROR EXIT ROLLBACK
REM *** BEGINNING OF GURMDBP MODS ***
REM GRANT EXECUTE ON export_tool TO PUBLIC
WHENEVER SQLERROR CONTINUE
REM start gurgrtb export_tool
WHENEVER SQLERROR EXIT ROLLBACK
REM *** END OF GURMDBP MODS ***
create public synonym export_tool for export_tool;
grant execute on export_tool to www_user;
set scan off
 
CREATE OR REPLACE PACKAGE BODY export_tool AS
 
    CURSOR cv_cursor_data IS
          SELECT distinct CONCAT(a.SCBCRSE_SUBJ_CODE,a.SCBCRSE_CRSE_NUMB) AS ID, a.SCBCRSE_TITLE, a.SCBCRSE_CREDIT_HR_LOW, f.stvdept_desc, get_prereq(a.SCBCRSE_SUBJ_CODE,a.SCBCRSE_CRSE_NUMB), get_coreq(a.SCBCRSE_SUBJ_CODE,a.SCBCRSE_CRSE_NUMB)
          FROM  SCBCRSE a, SCBCRKY, STVDEPT f
          WHERE a.SCBCRSE_EFF_TERM = (SELECT MAX(b.SCBCRSE_EFF_TERM)
                                     FROM SCBCRSE b
                                     WHERE b.SCBCRSE_CRSE_NUMB = a.SCBCRSE_CRSE_NUMB
                                     AND b.SCBCRSE_SUBJ_CODE = a.SCBCRSE_SUBJ_CODE
                                     AND b.SCBCRSE_EFF_TERM <= 200910)
          AND   a.SCBCRSE_SUBJ_CODE = SCBCRKY_SUBJ_CODE
          AND   a.SCBCRSE_CRSE_NUMB = SCBCRKY_CRSE_NUMB
          AND   a.SCBCRSE_CSTA_CODE = 'A'
          AND   a.SCBCRSE_CRSE_NUMB <> '000'
          AND   a.SCBCRSE_CRSE_NUMB <> '001'
          AND   a.SCBCRSE_CRSE_NUMB <> '002'
          AND   a.SCBCRSE_CRSE_NUMB <> '998'
          AND   a.SCBCRSE_CRSE_NUMB <> '999'
          AND   a.SCBCRSE_DEPT_CODE = f.stvdept_code
          AND   SCBCRKY_TERM_CODE_START <= 200910
          AND   SCBCRKY_TERM_CODE_END >= 200910
          ORDER BY ID;
          
   v_id VARCHAR2;
   v_title VARCHAR2;
   v_credit VARCHAR2;
   v_dept VARCHAR2;
   v_prereq VARCHAR2(4000);
   v_coreq VARCHAR2(4000);
   
  -- Function to get course PRE-REQS
  FUNCTION get_prereq(p_subj_code in VARCHAR2(20),p_crse_numb in VARCHAR2(20)) 
  RETURN clob IS
      
       CURSOR p_cursor IS
             SELECT CONCAT(b.SCRRTST_SUBJ_CODE_PREQ,b.SCRRTST_CRSE_NUMB_PREQ)
             FROM SCRRTST b
             WHERE p_subj_code    = b.SCRRTST_SUBJ_CODE
             AND p_crse_numb        = b.SCRRTST_CRSE_NUMB
             AND b.SCRRTST_CONCURRENCY_IND <> 'Y';
             
       l_value   p_cursor%ROWTYPE;
       l_result  clob;
       p_del varchar2 := ' ';
       
  BEGIN
      OPEN p_cursor;
      
      IF l_result IS NOT NULL THEN
              l_result := l_result || p_del;
      END IF;
      
      LOOP
          FETCH p_cursor INTO l_value;
          EXIT WHEN p_cursor%NOTFOUND;
          
          l_result := l_result || l_value;
      END LOOP;
      CLOSE p_cursor;
      RETURN l_result;
  END get_prereq;
 
  -- Function to get courses CO-REQS
  FUNCTION get_coreq(p_subj_code in VARCHAR2(20),p_crse_numb in VARCHAR2(20))
  RETURN clob IS
       
       CURSOR p_cursor2 IS
             SELECT CONCAT(d.SCRRTST_SUBJ_CODE_PREQ,d.SCRRTST_CRSE_NUMB_PREQ)
             FROM SCRRTST d
             WHERE p_subj_code = d.SCRRTST_SUBJ_CODE
             AND p_crse_numb = d.SCRRTST_CRSE_NUMB
             AND d.SCRRTST_CONCURRENCY_IND = 'Y';
             
       l_value2   p_cursor2%ROWTYPE;
       l_result2  clob;
       p_del2 VARCHAR2 := ' ';
             
  BEGIN
      
      IF l_result2 IS NOT NULL THEN
              l_result2 := l_result2 || p_del2;
      END IF;
          
      OPEN p_cursor2;
      LOOP
          FETCH p_cursor2 into l_value2;
          EXIT WHEN p_cursor2%NOTFOUND;
          
          l_result2 := l_result2 || l_value2;
      END LOOP;
      CLOSE p_cursor2;
      RETURN l_result2;
  END get_coreq;
  
  -- Output data
  PROCEDURE p_print_data 
  AS      
  BEGIN  
      OPEN cv_cursor_data;
      LOOP
        FETCH cv_cursor_data INTO v_id, v_title, v_credit, v_dept, v_prereq, v_coreq;
        EXIT WHEN cv_cursor_data%NOTFOUND;
        DBMS_OUTPUT.PUT_LINE(v_id||','||v_title||','||v_credit||','||v_dept||','||v_prereq||','||v_coreq);
      END LOOP;
      CLOSE cv_cursor_data;  
  END p_print_data;
  
END export_tool;
/
show errors
set scan on

                                  
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:

Select allOpen in new window

This Question has been solved and asker verified All Experts Exchange premium technology solutions are available to subscription members.

Subscribe now for full access to Experts Exchange and get

Instant Access to this Solution

  • Plus...
  • 30 Day FREE access, no risk, no obligation
  • Collaborate with the world's top tech experts
  • Unlimited access to our exclusive solution database
  • Never be left without tech help again

Subscribe Now

Asked On
2009-10-28 at 09:48:02ID24851679
Tags

Oracle PL/SQL

Topics

PL / SQL

,

Oracle 10.x

Participating Experts
1
Points
500
Comments
17

Trusted by hundreds of thousands everyday for fast, accurate and reliable tech support.

  • "The time we save is the biggest benefit of Experts Exchange to Warner Bros. What could take multiple guys 2 hours or more each to find is accessed in around 15 minutes on Experts Exchange." Mike Kapnisakis, Warner Bros.
  • "Our team likes having a resource that is more secure than just using Google and most experts using this service really know their stuff. It's nice to look here first versus using Google." Dayna Sellner, Lockheed Martin
  • "Anytime that I've been stumped with a problem, 9 out of 10 times Experts Exchange has either the accepted solution or an open discussion of the potential solution to the problem." Kenny Red, eBay Inc.

See what Experts Exchange can do for you.

Got a question?

We've got the answer.

Experts Exchange has been collecting answers to technology questions since 1996…3 million and counting! If you have a question, chances are we already have your answer.

Screenshot of Experts Exchange Knowledgebase

Need individual assistance?

Our experts are ready to help.

If you can't find the exact answer you're looking for, ask our exclusive community of 50,000 experts. You’ll get a personalized answer from a trusted professional.

Screenshot of Experts Exchange Knowledgebase

Want to learn from the best?

Read articles from industry experts.

Thousands of free tech tips, tricks, how-to’s and tutorials are available in our peer reviewed articles section. See for yourself how smart our experts are, no login required.

Screenshot of an Article

Working on a long term project?

Store your work and research.

Save solutions to your questions, answers you’ve discovered through searching plus helpful articles in your personal knowledgebase for easy future access.

Screenshot of Experts Exchange Knowledgebase

Access the answers to your technology questions today.

Subscribe Now

30-day free trial. Register in 60 seconds.

What Makes Experts Exchange Unique?

Members of the expert community talk about why the experience at Experts Exchange is different than what you will find anywhere else.

Trusted by the world's most respected brands.

image of each brand's logo

Faithfully serving IT professionals since 1996.

Experts Exchange Logo

Try it out and discover for yourself.

Subscribe Now

30-day free trial. Register in 60 seconds.

Related Solutions

  1. Trigger DDL Fails with PLS-00103: Encountered the s…
    I am creating an oracle database using ODBC.. everything works except the triggers.. they all produce this error: PLS-00103: Encountered the symbol "" when expecting one of the following: begin declare exit for goto if loop mod null pragma raise return selec...
  2. ORA-06550: line 1, column 36: PLS-00103…
    Following is the code of oracle function:- create or replace function add_constraint(p_pk_table varchar2, p_pk_col_list varchar2, p_fk_table varchar2, p_fk_col_list varchar2 := null) return varchar2 is v_add_statement varchar2(200) := null; v_statement varchar2(4000) := nul...
  3. PLS-00103
    Can anyone please tell me why I am getting the error shown below! drop TYPE Budget_objtyp; CREATE TYPE Budget_objtyp as object( Year number, Value number(6), Current_Expenditure number(6,2), member procedure UpdateExpenditure( p_Year number,p_Costof...
  4. PLS-00103: Encountered the symbol
    Hi, I am running the following: DECLARE nMaxValue NUMBER(15); BEGIN EXECUTE IMMEDIATE('select NVL(MAX(Version), 0) FROM INFO')INTO nMaxValue; IF nMaxValue = 50002 THEN dbms_output.put_line('New records for GlobalDefaults....'); Insert into Defaults (Type,A...
  5. PLS-00103: Encountered the symbol
    I have the following package and procedure. CREATE PROCEDURE errors and the error message shows below. Thanks. CREATE OR REPLACE PACKAGE ogdwods.po_ods_flow_measurement_pkg AS PROCEDURE post_proc_pden_flow_measure; -- END; / CREATE OR REPLACE PACKAGE BODY ogdwods.po_...
  6. Function error PLS-00103:
    hi experts , If i compile Function the following error i getting : what will be the cause. SQL> show error Errors for FUNCTION GET_USER_SCOINFOID_SIVA: LINE/COL ERROR -------- ----------------------------------------------------------------- 6/1 PLS-00103: Encounte...

Free Tech Articles

  1. WARNING: 5 Reasons why you should NEVER fix a computer for free.
    It is in our nature to love the puzzle. We are obsessed. The lot of us. We love puzzles. We love the challenge. We thrive on finding the answer. We hate disarray. It bothers us deep in our soul. W...
  2. SCCM OSD Basic troubleshooting
    SCCM 2007 OSD is a fantastic way to deploy operating systems, however, like most things SCCM issues can sometimes be difficult to resolve due to the sheer volume of logs to sift through and the dispe...
  3. Migrate Small Business Server 2003 to Exchange 2010 and Windows 2008 R2
    This guide is intended to provide step by step instructions on how to migrate from Small Business Server 2003 to Windows 2008 R2 with Exchange 2010. For this migration to work you will need the fo...
  4. Create a Win7 Gadget
    This article shows you how to create a simple "Gadget" -- a sort of mini-application supported by Windows 7 and Vista. Gadgets can be dropped anywhere on the desktop to provide instant information, ...
  5. Outlook continually prompting for username and password
    There have been a lot of questions recently regarding Outlook prompting for a username and password whilst using Exchange 2007. There are a few reasons why this would happen and I will try to cover t...
  6. Backup Exchange 2010 Information Store using Windows Backup
    There seems to be quite a lot of confusion around the ability to backup Exchange 2010 using the built in Windows Backup feature. This stems from the omission of this feature prior to Exchange 2007 s...

Cloud Class Webinars

  1. Avoiding Bugs in Microsoft Access
    Alison Balter takes and in-depth look at avoiding bugs in Access. In this webinar you will learn about using the immediate window to debug your applications, invoking the debugger, using breakpoints to troubleshoot, stepping through code, setting the next statement to execute, ...
  2. Top 10 Best New Features in Visio 2010
    Scott Helmers gives live demonstrations of the top 10 new features in Visio 2010. This webinar will teach you how to create compelling diagrams by adding shapes to the page with a single click, linking the shapes in a diagram to data in Excel (or SQL Server, or SharePoint), ...
  3. IT Consultant Business Secrets Revealed
    Michael Munger, Experts Exchange tech pro and IT consultant, pulls back the curtain on his very successful businesses and answers question on every IT consultant and business owner should know about. He shares secrets on what he did to solve the 5 most common problems in IT, ...
  4. Disaster Recovery and Business Continuity
    Quest CTO, Mike Billon, gives an overview of the steps involved in building a dunamic disaster recovery plan. Through case studies and an examination of software/hardware tooles for monitoring and testing, you'll gain a better understandin of where you are, where you want ...
  5. Organize Your Visio Diagrams with Containers and Lists
    Scott Helmers uses cross functional flowcharts, wireframe diagrams, data graphic legends and seating charts to teach you: how to ustilize all three new structured diagram components in Visio 2010, the best practices for organizeing shapes in previous version of Visio, how to organize ...
  6. How to Us Objects, Properties, Events and Methods in Microsoft Access
    Alison Dalter gives an in-depbth look at objects, properties, events and methods in Microsoft Access. In this webinar you will learn about using the object browser, referring to objects, working with properties and methods, working with object variables, understanding the ...

Join the Community

Give a Little. Get a Lot.

Join the community of experts here and help other tech pros by answering question in your area of expertise. You can earn FREE access to all Experts Exchange's premium features and resources.

Join the Community

Answers

 

by: sdstuberPosted on 2009-10-28 at 09:53:20ID: 25685371

don't specify sizes on your parameters


CREATE OR REPLACE PACKAGE export_tool
AS
    FUNCTION get_prereq(p_subj_code IN VARCHAR2, p_crse_numb IN VARCHAR2)
        RETURN CLOB;

    FUNCTION get_coreq(p_subj_code IN VARCHAR2, p_crse_numb IN VARCHAR2)
        RETURN CLOB;

    PROCEDURE p_print_data;
END export_tool;
/

 

by: geeta_m9Posted on 2009-10-28 at 10:08:34ID: 25685547

I did as you suggested, but I am still getting the compilation errors:

Errors for PACKAGE BODY EXPORT_TOOL:

LINE/COL ERROR
-------- -----------------------------------------------------------------
24/9     PLS-00215: String length constraints must be in range (1 ..
         32767)

25/12    PLS-00215: String length constraints must be in range (1 ..
         32767)

26/13    PLS-00215: String length constraints must be in range (1 ..
         32767)

27/11    PLS-00215: String length constraints must be in range (1 ..
         32767)

LINE/COL ERROR
-------- -----------------------------------------------------------------

44/14    PLS-00215: String length constraints must be in range (1 ..
         32767)

57/11    PL/SQL: Statement ignored
57/23    PLS-00306: wrong number or types of arguments in call to '||'
76/15    PLS-00215: String length constraints must be in range (1 ..
         32767)

89/11    PL/SQL: Statement ignored
89/24    PLS-00306: wrong number or types of arguments in call to '||'

 

by: sdstuberPosted on 2009-10-28 at 10:11:53ID: 25685591

varchar2  variables you must specify lengths...

for example

v_id  VARCHAR2;

should have a size on it


 v_id     VARCHAR2(20);    

change (20) to whatever is appropriate for the type

 

by: geeta_m9Posted on 2009-10-28 at 10:21:56ID: 25685725

I rewrote my code as follows:

set scan off

CREATE OR REPLACE PACKAGE export_tool AS

  FUNCTION get_prereq(p_subj_code in SCBCRSE.SCBCRSE_SUBJ_CODE%TYPE,p_crse_numb in SCBCRSE.SCBCRSE_CRSE_NUMB%TYPE) RETURN clob;
  FUNCTION get_coreq(p_subj_code in SCBCRSE.SCBCRSE_SUBJ_CODE%TYPE,p_crse_numb in SCBCRSE.SCBCRSE_CRSE_NUMB%TYPE) RETURN clob;
  PROCEDURE p_print_data;

END export_tool;
/
show errors

WHENEVER SQLERROR CONTINUE
DROP PUBLIC SYNONYM export_tool;
WHENEVER SQLERROR EXIT ROLLBACK
REM *** BEGINNING OF GURMDBP MODS ***
REM GRANT EXECUTE ON export_tool TO PUBLIC
WHENEVER SQLERROR CONTINUE
REM start gurgrtb export_tool
WHENEVER SQLERROR EXIT ROLLBACK
REM *** END OF GURMDBP MODS ***
create public synonym export_tool for export_tool;
grant execute on export_tool to www_user;
set scan off

CREATE OR REPLACE PACKAGE BODY export_tool AS

    CURSOR cv_cursor_data IS
          SELECT distinct CONCAT(a.SCBCRSE_SUBJ_CODE,a.SCBCRSE_CRSE_NUMB) AS ID, a.SCBCRSE_TITLE, a.SCBCRSE_CREDIT_HR_LOW, f.stvdept_desc, get_prereq(a.SCBCRSE_SUBJ_CODE,a.SCBCRSE_CRSE_NUMB), get_coreq(a.SCBCRSE_SUBJ_CODE,a.SCBCRSE_CRSE_NUMB)
          FROM  SCBCRSE a, SCBCRKY, STVDEPT f
          WHERE a.SCBCRSE_EFF_TERM = (SELECT MAX(b.SCBCRSE_EFF_TERM)
                                     FROM SCBCRSE b
                                     WHERE b.SCBCRSE_CRSE_NUMB = a.SCBCRSE_CRSE_NUMB
                                     AND b.SCBCRSE_SUBJ_CODE = a.SCBCRSE_SUBJ_CODE
                                     AND b.SCBCRSE_EFF_TERM <= 200910)
          AND   a.SCBCRSE_SUBJ_CODE = SCBCRKY_SUBJ_CODE
          AND   a.SCBCRSE_CRSE_NUMB = SCBCRKY_CRSE_NUMB
          AND   a.SCBCRSE_CSTA_CODE = 'A'
          AND   a.SCBCRSE_CRSE_NUMB <> '000'
          AND   a.SCBCRSE_CRSE_NUMB <> '001'
          AND   a.SCBCRSE_CRSE_NUMB <> '002'
          AND   a.SCBCRSE_CRSE_NUMB <> '998'
          AND   a.SCBCRSE_CRSE_NUMB <> '999'
          AND   a.SCBCRSE_DEPT_CODE = f.stvdept_code
          AND   SCBCRKY_TERM_CODE_START <= 200910
          AND   SCBCRKY_TERM_CODE_END >= 200910
          ORDER BY ID;
         
   v_id VARCHAR2;
   v_title VARCHAR2;
   v_credit VARCHAR2;
   v_dept VARCHAR2;
   v_prereq VARCHAR2(32767);
   v_coreq VARCHAR2(32767);
   
  -- Function to get course PRE-REQS
  FUNCTION get_prereq(p_subj_code in SCBCRSE.SCBCRSE_SUBJ_CODE%TYPE,p_crse_numb in SCBCRSE.SCBCRSE_CRSE_NUMB%TYPE)
  RETURN clob IS
     
       CURSOR p_cursor IS
             SELECT CONCAT(b.SCRRTST_SUBJ_CODE_PREQ,b.SCRRTST_CRSE_NUMB_PREQ)
             FROM SCRRTST b
             WHERE p_subj_code    = b.SCRRTST_SUBJ_CODE
             AND p_crse_numb        = b.SCRRTST_CRSE_NUMB
             AND b.SCRRTST_CONCURRENCY_IND <> 'Y';
             
       l_value   p_cursor%ROWTYPE;
       l_result  clob;
       p_del varchar2 := ' ';
       
  BEGIN
      OPEN p_cursor;
     
      IF l_result IS NOT NULL THEN
              l_result := l_result || p_del;
      END IF;
     
      LOOP
          FETCH p_cursor INTO l_value;
          EXIT WHEN p_cursor%NOTFOUND;
         
          l_result := l_result || l_value;
      END LOOP;
      CLOSE p_cursor;
      RETURN l_result;
  END get_prereq;

  -- Function to get courses CO-REQS
  FUNCTION get_coreq(p_subj_code in SCBCRSE.SCBCRSE_SUBJ_CODE%TYPE,p_crse_numb in SCBCRSE.SCBCRSE_CRSE_NUMB%TYPE)
  RETURN clob IS
       
       CURSOR p_cursor2 IS
             SELECT CONCAT(d.SCRRTST_SUBJ_CODE_PREQ,d.SCRRTST_CRSE_NUMB_PREQ)
             FROM SCRRTST d
             WHERE p_subj_code = d.SCRRTST_SUBJ_CODE
             AND p_crse_numb = d.SCRRTST_CRSE_NUMB
             AND d.SCRRTST_CONCURRENCY_IND = 'Y';
             
       l_value2   p_cursor2%ROWTYPE;
       l_result2  clob;
       p_del2 VARCHAR2 := ' ';
             
  BEGIN
     
      IF l_result2 IS NOT NULL THEN
              l_result2 := l_result2 || p_del2;
      END IF;
         
      OPEN p_cursor2;
      LOOP
          FETCH p_cursor2 into l_value2;
          EXIT WHEN p_cursor2%NOTFOUND;
         
          l_result2 := l_result2 || l_value2;
      END LOOP;
      CLOSE p_cursor2;
      RETURN l_result2;
  END get_coreq;
 
  -- Output data
  PROCEDURE p_print_data
  AS      
  BEGIN  
      OPEN cv_cursor_data;
      LOOP
        FETCH cv_cursor_data INTO v_id, v_title, v_credit, v_dept, v_prereq, v_coreq;
        EXIT WHEN cv_cursor_data%NOTFOUND;
        DBMS_OUTPUT.PUT_LINE(v_id||','||v_title||','||v_credit||','||v_dept||','||v_prereq||','||v_coreq);
      END LOOP;
      CLOSE cv_cursor_data;  
  END p_print_data;
 
END export_tool;
/
show errors
set scan on


However, I still get the following error:

Errors for PACKAGE BODY EXPORT_TOOL:

LINE/COL ERROR
-------- -----------------------------------------------------------------
24/9     PLS-00215: String length constraints must be in range (1 ..
         32767)

25/12    PLS-00215: String length constraints must be in range (1 ..
         32767)

26/13    PLS-00215: String length constraints must be in range (1 ..
         32767)

27/11    PLS-00215: String length constraints must be in range (1 ..
         32767)

LINE/COL ERROR
-------- -----------------------------------------------------------------

44/14    PLS-00215: String length constraints must be in range (1 ..
         32767)

57/11    PL/SQL: Statement ignored
57/23    PLS-00306: wrong number or types of arguments in call to '||'
76/15    PLS-00215: String length constraints must be in range (1 ..
         32767)

89/11    PL/SQL: Statement ignored
89/24    PLS-00306: wrong number or types of arguments in call to '||'

 

by: sdstuberPosted on 2009-10-28 at 10:32:19ID: 25685933

you didn't fix the variables


v_id VARCHAR2;
   v_title VARCHAR2;
   v_credit VARCHAR2;
   v_dept VARCHAR2;
 p_del varchar2 := ' ';
 p_del2 VARCHAR2 := ' ';

 

by: sdstuberPosted on 2009-10-28 at 10:33:22ID: 25685941

the error messages are pointing you exactly where you need to look

line 24 is v_id
line 25 is v_title
line 26 is v_credit

etc

 

by: sdstuberPosted on 2009-10-28 at 10:48:04ID: 25686102

also note the errors on 57 and 89

57/11 PL/SQL: Statement ignored
57/23 PLS-00306: wrong number or types of arguments in call to '||'

l_result := l_result || l_value;

but the definitions are...

l_value p_cursor%ROWTYPE;
l_result clob;

you can't concatenate a row (even a row of one column) to a clob

89 has same problem

 

by: sdstuberPosted on 2009-10-28 at 10:52:11ID: 25686144

after you fix your variables.

to fix your concatantion problems,  add an alias, for example

SELECT CONCAT(b.SCRRTST_SUBJ_CODE_PREQ,b.SCRRTST_CRSE_NUMB_PREQ)  yourstring


then when you concatenate...


l_result := l_result || l_value.yourstring;

 

by: geeta_m9Posted on 2009-10-28 at 10:54:27ID: 25686177

I updated by code as follows:

set scan off

CREATE OR REPLACE PACKAGE export_tool AS

  FUNCTION get_prereq(p_subj_code in SCBCRSE.SCBCRSE_SUBJ_CODE%TYPE,p_crse_numb in SCBCRSE.SCBCRSE_CRSE_NUMB%TYPE) RETURN clob;
  FUNCTION get_coreq(p_subj_code in SCBCRSE.SCBCRSE_SUBJ_CODE%TYPE,p_crse_numb in SCBCRSE.SCBCRSE_CRSE_NUMB%TYPE) RETURN clob;
  PROCEDURE p_print_data;

END export_tool;
/
show errors

WHENEVER SQLERROR CONTINUE
DROP PUBLIC SYNONYM export_tool;
WHENEVER SQLERROR EXIT ROLLBACK
REM *** BEGINNING OF GURMDBP MODS ***
REM GRANT EXECUTE ON export_tool TO PUBLIC
WHENEVER SQLERROR CONTINUE
REM start gurgrtb export_tool
WHENEVER SQLERROR EXIT ROLLBACK
REM *** END OF GURMDBP MODS ***
create public synonym export_tool for export_tool;
grant execute on export_tool to www_user;
set scan off

CREATE OR REPLACE PACKAGE BODY export_tool AS

    CURSOR cv_cursor_data IS
          SELECT distinct CONCAT(a.SCBCRSE_SUBJ_CODE,a.SCBCRSE_CRSE_NUMB) AS ID, a.SCBCRSE_TITLE, a.SCBCRSE_CREDIT_HR_LOW, f.stvdept_desc, get_prereq(a.SCBCRSE_SUBJ_CODE,a.SCBCRSE_CRSE_NUMB), get_coreq(a.SCBCRSE_SUBJ_CODE,a.SCBCRSE_CRSE_NUMB)
          FROM  SCBCRSE a, SCBCRKY, STVDEPT f
          WHERE a.SCBCRSE_EFF_TERM = (SELECT MAX(b.SCBCRSE_EFF_TERM)
                                     FROM SCBCRSE b
                                     WHERE b.SCBCRSE_CRSE_NUMB = a.SCBCRSE_CRSE_NUMB
                                     AND b.SCBCRSE_SUBJ_CODE = a.SCBCRSE_SUBJ_CODE
                                     AND b.SCBCRSE_EFF_TERM <= 200910)
          AND   a.SCBCRSE_SUBJ_CODE = SCBCRKY_SUBJ_CODE
          AND   a.SCBCRSE_CRSE_NUMB = SCBCRKY_CRSE_NUMB
          AND   a.SCBCRSE_CSTA_CODE = 'A'
          AND   a.SCBCRSE_CRSE_NUMB <> '000'
          AND   a.SCBCRSE_CRSE_NUMB <> '001'
          AND   a.SCBCRSE_CRSE_NUMB <> '002'
          AND   a.SCBCRSE_CRSE_NUMB <> '998'
          AND   a.SCBCRSE_CRSE_NUMB <> '999'
          AND   a.SCBCRSE_DEPT_CODE = f.stvdept_code
          AND   SCBCRKY_TERM_CODE_START <= 200910
          AND   SCBCRKY_TERM_CODE_END >= 200910
          ORDER BY ID;
         
   v_id VARCHAR2(40);
   v_title VARCHAR2(40);
   v_credit VARCHAR2(40);
   v_dept VARCHAR2(40);
   v_prereq VARCHAR2(32767);
   v_coreq VARCHAR2(32767);
   
  -- Function to get course PRE-REQS
  FUNCTION get_prereq(p_subj_code in SCBCRSE.SCBCRSE_SUBJ_CODE%TYPE,p_crse_numb in SCBCRSE.SCBCRSE_CRSE_NUMB%TYPE)
  RETURN clob IS
     
       CURSOR p_cursor IS
             SELECT CONCAT(b.SCRRTST_SUBJ_CODE_PREQ,b.SCRRTST_CRSE_NUMB_PREQ)
             FROM SCRRTST b
             WHERE p_subj_code    = b.SCRRTST_SUBJ_CODE
             AND p_crse_numb        = b.SCRRTST_CRSE_NUMB
             AND b.SCRRTST_CONCURRENCY_IND <> 'Y';
             
       l_value   p_cursor%ROWTYPE;
       l_result  clob;
       p_del varchar2 := ' ';
       
  BEGIN
      OPEN p_cursor;
     
      IF l_result IS NOT NULL THEN
              l_result := l_result || p_del;
      END IF;
     
      LOOP
          FETCH p_cursor INTO l_value;
          EXIT WHEN p_cursor%NOTFOUND;
         
          l_result := l_result || l_value;
      END LOOP;
      CLOSE p_cursor;
      RETURN l_result;
  END get_prereq;

  -- Function to get courses CO-REQS
  FUNCTION get_coreq(p_subj_code in SCBCRSE.SCBCRSE_SUBJ_CODE%TYPE,p_crse_numb in SCBCRSE.SCBCRSE_CRSE_NUMB%TYPE)
  RETURN clob IS
       
       CURSOR p_cursor2 IS
             SELECT CONCAT(d.SCRRTST_SUBJ_CODE_PREQ,d.SCRRTST_CRSE_NUMB_PREQ)
             FROM SCRRTST d
             WHERE p_subj_code = d.SCRRTST_SUBJ_CODE
             AND p_crse_numb = d.SCRRTST_CRSE_NUMB
             AND d.SCRRTST_CONCURRENCY_IND = 'Y';
             
       l_value2   p_cursor2%ROWTYPE;
       l_result2  clob;
       p_del2 VARCHAR2 := ' ';
             
  BEGIN
     
      IF l_result2 IS NOT NULL THEN
              l_result2 := l_result2 || p_del2;
      END IF;
         
      OPEN p_cursor2;
      LOOP
          FETCH p_cursor2 into l_value2;
          EXIT WHEN p_cursor2%NOTFOUND;
         
          l_result2 := l_result2 || l_value2;
      END LOOP;
      CLOSE p_cursor2;
      RETURN l_result2;
  END get_coreq;
 
  -- Output data
  PROCEDURE p_print_data
  AS      
  BEGIN  
      OPEN cv_cursor_data;
      LOOP
        FETCH cv_cursor_data INTO v_id, v_title, v_credit, v_dept, v_prereq, v_coreq;
        EXIT WHEN cv_cursor_data%NOTFOUND;
        DBMS_OUTPUT.PUT_LINE(v_id||','||v_title||','||v_credit||','||v_dept||','||v_prereq||','||v_coreq);
      END LOOP;
      CLOSE cv_cursor_data;  
  END p_print_data;
 
END export_tool;
/
show errors
set scan on

but now I get these errors:

44/14    PLS-00215: String length constraints must be in range (1 ..
         32767)

57/11    PL/SQL: Statement ignored
57/23    PLS-00306: wrong number or types of arguments in call to '||'
76/15    PLS-00215: String length constraints must be in range (1 ..
         32767)

89/11    PL/SQL: Statement ignored
89/24    PLS-00306: wrong number or types of arguments in call to '||'

Is it because I am trying to concatenate a varchar2 to a clob? Lresult2 is delcared as a clob, but p_del2 is a varchar2.

 

by: sdstuberPosted on 2009-10-28 at 11:00:08ID: 25686249

44/14    PLS-00215: String length constraints must be in range (1 ..
         32767)


line 44         p_del varchar2 := ' ';

you need to define a size

57/11    PL/SQL: Statement ignored
57/23    PLS-00306: wrong number or types of arguments in call to '||'

line 57   l_result := l_result || l_value;

same problem as stated above


same thing with line 76 and 89

 

by: geeta_m9Posted on 2009-10-28 at 11:13:04ID: 25686417

Ok, I put in the size for p_del and p_del2 as follows:

set scan off

CREATE OR REPLACE PACKAGE export_tool AS

  FUNCTION get_prereq(p_subj_code in SCBCRSE.SCBCRSE_SUBJ_CODE%TYPE,p_crse_numb in SCBCRSE.SCBCRSE_CRSE_NUMB%TYPE) RETURN clob;
  FUNCTION get_coreq(p_subj_code in SCBCRSE.SCBCRSE_SUBJ_CODE%TYPE,p_crse_numb in SCBCRSE.SCBCRSE_CRSE_NUMB%TYPE) RETURN clob;
  PROCEDURE p_print_data;

END export_tool;
/
show errors

WHENEVER SQLERROR CONTINUE
DROP PUBLIC SYNONYM export_tool;
WHENEVER SQLERROR EXIT ROLLBACK
REM *** BEGINNING OF GURMDBP MODS ***
REM GRANT EXECUTE ON export_tool TO PUBLIC
WHENEVER SQLERROR CONTINUE
REM start gurgrtb export_tool
WHENEVER SQLERROR EXIT ROLLBACK
REM *** END OF GURMDBP MODS ***
create public synonym export_tool for export_tool;
grant execute on export_tool to www_user;
set scan off

CREATE OR REPLACE PACKAGE BODY export_tool AS

    CURSOR cv_cursor_data IS
          SELECT distinct CONCAT(a.SCBCRSE_SUBJ_CODE,a.SCBCRSE_CRSE_NUMB) AS ID, a.SCBCRSE_TITLE, a.SCBCRSE_CREDIT_HR_LOW, f.stvdept_desc, get_prereq(a.SCBCRSE_SUBJ_CODE,a.SCBCRSE_CRSE_NUMB), get_coreq(a.SCBCRSE_SUBJ_CODE,a.SCBCRSE_CRSE_NUMB)
          FROM  SCBCRSE a, SCBCRKY, STVDEPT f
          WHERE a.SCBCRSE_EFF_TERM = (SELECT MAX(b.SCBCRSE_EFF_TERM)
                                     FROM SCBCRSE b
                                     WHERE b.SCBCRSE_CRSE_NUMB = a.SCBCRSE_CRSE_NUMB
                                     AND b.SCBCRSE_SUBJ_CODE = a.SCBCRSE_SUBJ_CODE
                                     AND b.SCBCRSE_EFF_TERM <= 200910)
          AND   a.SCBCRSE_SUBJ_CODE = SCBCRKY_SUBJ_CODE
          AND   a.SCBCRSE_CRSE_NUMB = SCBCRKY_CRSE_NUMB
          AND   a.SCBCRSE_CSTA_CODE = 'A'
          AND   a.SCBCRSE_CRSE_NUMB <> '000'
          AND   a.SCBCRSE_CRSE_NUMB <> '001'
          AND   a.SCBCRSE_CRSE_NUMB <> '002'
          AND   a.SCBCRSE_CRSE_NUMB <> '998'
          AND   a.SCBCRSE_CRSE_NUMB <> '999'
          AND   a.SCBCRSE_DEPT_CODE = f.stvdept_code
          AND   SCBCRKY_TERM_CODE_START <= 200910
          AND   SCBCRKY_TERM_CODE_END >= 200910
          ORDER BY ID;
         
   v_id VARCHAR2(40);
   v_title VARCHAR2(40);
   v_credit VARCHAR2(40);
   v_dept VARCHAR2(40);
   v_prereq VARCHAR2(32767);
   v_coreq VARCHAR2(32767);
   
  -- Function to get course PRE-REQS
  FUNCTION get_prereq(p_subj_code in SCBCRSE.SCBCRSE_SUBJ_CODE%TYPE,p_crse_numb in SCBCRSE.SCBCRSE_CRSE_NUMB%TYPE)
  RETURN clob IS
     
       CURSOR p_cursor IS
             SELECT CONCAT(b.SCRRTST_SUBJ_CODE_PREQ,b.SCRRTST_CRSE_NUMB_PREQ)
             FROM SCRRTST b
             WHERE p_subj_code    = b.SCRRTST_SUBJ_CODE
             AND p_crse_numb        = b.SCRRTST_CRSE_NUMB
             AND b.SCRRTST_CONCURRENCY_IND <> 'Y';
             
       l_value p_cursor%ROWTYPE;
       l_result  clob;
       p_del varchar2(1) := ' ';
       
  BEGIN
      OPEN p_cursor;
     
      IF l_result IS NOT NULL THEN
              l_result := l_result || p_del;
      END IF;
     
      LOOP
          FETCH p_cursor INTO l_value;
          EXIT WHEN p_cursor%NOTFOUND;
         
          l_result := l_result || l_value;
      END LOOP;
      CLOSE p_cursor;
      RETURN l_result;
  END get_prereq;

  -- Function to get courses CO-REQS
  FUNCTION get_coreq(p_subj_code in SCBCRSE.SCBCRSE_SUBJ_CODE%TYPE,p_crse_numb in SCBCRSE.SCBCRSE_CRSE_NUMB%TYPE)
  RETURN clob IS
       
       CURSOR p_cursor2 IS
             SELECT CONCAT(d.SCRRTST_SUBJ_CODE_PREQ,d.SCRRTST_CRSE_NUMB_PREQ)
             FROM SCRRTST d
             WHERE p_subj_code = d.SCRRTST_SUBJ_CODE
             AND p_crse_numb = d.SCRRTST_CRSE_NUMB
             AND d.SCRRTST_CONCURRENCY_IND = 'Y';
             
       l_value2   p_cursor2%ROWTYPE;
       l_result2  clob;
       p_del2 VARCHAR2(1) := ' ';
             
  BEGIN
     
      IF l_result2 IS NOT NULL THEN
              l_result2 := l_result2 || p_del2;
      END IF;
         
      OPEN p_cursor2;
      LOOP
          FETCH p_cursor2 into l_value2;
          EXIT WHEN p_cursor2%NOTFOUND;
         
          l_result2 := l_result2 || l_value2;
      END LOOP;
      CLOSE p_cursor2;
      RETURN l_result2;
  END get_coreq;
 
  -- Output data
  PROCEDURE p_print_data
  AS      
  BEGIN  
      OPEN cv_cursor_data;
      LOOP
        FETCH cv_cursor_data INTO v_id, v_title, v_credit, v_dept, v_prereq, v_coreq;
        EXIT WHEN cv_cursor_data%NOTFOUND;
        DBMS_OUTPUT.PUT_LINE(v_id||','||v_title||','||v_credit||','||v_dept||','||v_prereq||','||v_coreq);
      END LOOP;
      CLOSE cv_cursor_data;  
  END p_print_data;
 
END export_tool;
/
show errors
set scan on


Now I get the error:

57/11    PL/SQL: Statement ignored
57/23    PLS-00306: wrong number or types of arguments in call to '||'
89/11    PL/SQL: Statement ignored
89/24    PLS-00306: wrong number or types of arguments in call to '||'


I have already declared l_result as a clob and l_value as p_cursor%ROWTYPE so I am not sure what is still causing the error.

 

by: sdstuberPosted on 2009-10-28 at 11:16:29ID: 25686452

check post 25686102 and 25686144 above

problem still there

 

by: geeta_m9Posted on 2009-10-28 at 11:34:22ID: 25686662

I changed the code to what you suggested in the above posts and it compiled successfully, even with the clob! I haven't run it yet, so it might give me an error there.

set scan off

CREATE OR REPLACE PACKAGE export_tool AS

  FUNCTION get_prereq(p_subj_code in SCBCRSE.SCBCRSE_SUBJ_CODE%TYPE,p_crse_numb in SCBCRSE.SCBCRSE_CRSE_NUMB%TYPE) RETURN clob;
  FUNCTION get_coreq(p_subj_code in SCBCRSE.SCBCRSE_SUBJ_CODE%TYPE,p_crse_numb in SCBCRSE.SCBCRSE_CRSE_NUMB%TYPE) RETURN clob;
  PROCEDURE p_print_data;

END export_tool;
/
show errors

WHENEVER SQLERROR CONTINUE
DROP PUBLIC SYNONYM export_tool;
WHENEVER SQLERROR EXIT ROLLBACK
REM *** BEGINNING OF GURMDBP MODS ***
REM GRANT EXECUTE ON export_tool TO PUBLIC
WHENEVER SQLERROR CONTINUE
REM start gurgrtb export_tool
WHENEVER SQLERROR EXIT ROLLBACK
REM *** END OF GURMDBP MODS ***
create public synonym export_tool for export_tool;
grant execute on export_tool to www_user;
set scan off

CREATE OR REPLACE PACKAGE BODY export_tool AS

    CURSOR cv_cursor_data IS
          SELECT distinct CONCAT(a.SCBCRSE_SUBJ_CODE,a.SCBCRSE_CRSE_NUMB) AS ID, a.SCBCRSE_TITLE, a.SCBCRSE_CREDIT_HR_LOW, f.stvdept_desc, get_prereq(a.SCBCRSE_SUBJ_CODE,a.SCBCRSE_CRSE_NUMB), get_coreq(a.SCBCRSE_SUBJ_CODE,a.SCBCRSE_CRSE_NUMB)
          FROM  SCBCRSE a, SCBCRKY, STVDEPT f
          WHERE a.SCBCRSE_EFF_TERM = (SELECT MAX(b.SCBCRSE_EFF_TERM)
                                     FROM SCBCRSE b
                                     WHERE b.SCBCRSE_CRSE_NUMB = a.SCBCRSE_CRSE_NUMB
                                     AND b.SCBCRSE_SUBJ_CODE = a.SCBCRSE_SUBJ_CODE
                                     AND b.SCBCRSE_EFF_TERM <= 200910)
          AND   a.SCBCRSE_SUBJ_CODE = SCBCRKY_SUBJ_CODE
          AND   a.SCBCRSE_CRSE_NUMB = SCBCRKY_CRSE_NUMB
          AND   a.SCBCRSE_CSTA_CODE = 'A'
          AND   a.SCBCRSE_CRSE_NUMB <> '000'
          AND   a.SCBCRSE_CRSE_NUMB <> '001'
          AND   a.SCBCRSE_CRSE_NUMB <> '002'
          AND   a.SCBCRSE_CRSE_NUMB <> '998'
          AND   a.SCBCRSE_CRSE_NUMB <> '999'
          AND   a.SCBCRSE_DEPT_CODE = f.stvdept_code
          AND   SCBCRKY_TERM_CODE_START <= 200910
          AND   SCBCRKY_TERM_CODE_END >= 200910
          ORDER BY ID;
         
   v_id VARCHAR2(40);
   v_title VARCHAR2(40);
   v_credit VARCHAR2(40);
   v_dept VARCHAR2(40);
   v_prereq VARCHAR2(32767);
   v_coreq VARCHAR2(32767);
   
  -- Function to get course PRE-REQS
  FUNCTION get_prereq(p_subj_code in SCBCRSE.SCBCRSE_SUBJ_CODE%TYPE,p_crse_numb in SCBCRSE.SCBCRSE_CRSE_NUMB%TYPE)
  RETURN clob IS
     
       CURSOR p_cursor IS
             SELECT CONCAT(b.SCRRTST_SUBJ_CODE_PREQ,b.SCRRTST_CRSE_NUMB_PREQ)as string1
             FROM SCRRTST b
             WHERE p_subj_code    = b.SCRRTST_SUBJ_CODE
             AND p_crse_numb        = b.SCRRTST_CRSE_NUMB
             AND b.SCRRTST_CONCURRENCY_IND <> 'Y';
             
       l_value p_cursor%ROWTYPE;
       l_result  clob;
       p_del varchar2(1) := ' ';
       
  BEGIN
      OPEN p_cursor;
     
      IF l_result IS NOT NULL THEN
              l_result := l_result || p_del;
      END IF;
     
      LOOP
          FETCH p_cursor INTO l_value;
          EXIT WHEN p_cursor%NOTFOUND;
         
          l_result := l_result || l_value.string1;
      END LOOP;
      CLOSE p_cursor;
      RETURN l_result;
  END get_prereq;

  -- Function to get courses CO-REQS
  FUNCTION get_coreq(p_subj_code in SCBCRSE.SCBCRSE_SUBJ_CODE%TYPE,p_crse_numb in SCBCRSE.SCBCRSE_CRSE_NUMB%TYPE)
  RETURN clob IS
       
       CURSOR p_cursor2 IS
             SELECT CONCAT(d.SCRRTST_SUBJ_CODE_PREQ,d.SCRRTST_CRSE_NUMB_PREQ) as string2
             FROM SCRRTST d
             WHERE p_subj_code = d.SCRRTST_SUBJ_CODE
             AND p_crse_numb = d.SCRRTST_CRSE_NUMB
             AND d.SCRRTST_CONCURRENCY_IND = 'Y';
             
       l_value2   p_cursor2%ROWTYPE;
       l_result2  clob;
       p_del2 VARCHAR2(1) := ' ';
             
  BEGIN
     
      IF l_result2 IS NOT NULL THEN
              l_result2 := l_result2 || p_del2;
      END IF;
         
      OPEN p_cursor2;
      LOOP
          FETCH p_cursor2 into l_value2;
          EXIT WHEN p_cursor2%NOTFOUND;
         
          l_result2 := l_result2 || l_value2.string2;
      END LOOP;
      CLOSE p_cursor2;
      RETURN l_result2;
  END get_coreq;
 
  -- Output data
  PROCEDURE p_print_data
  AS      
  BEGIN  
      OPEN cv_cursor_data;
      LOOP
        FETCH cv_cursor_data INTO v_id, v_title, v_credit, v_dept, v_prereq, v_coreq;
        EXIT WHEN cv_cursor_data%NOTFOUND;
        DBMS_OUTPUT.PUT_LINE(v_id||','||v_title||','||v_credit||','||v_dept||','||v_prereq||','||v_coreq);
      END LOOP;
      CLOSE cv_cursor_data;  
  END p_print_data;
 
END export_tool;
/
show errors
set scan on

 

by: sdstuberPosted on 2009-10-28 at 11:46:04ID: 25686789

yes, the problem wasn't the clob it was concatenating a "rowtype"

 

by: geeta_m9Posted on 2009-10-28 at 11:54:53ID: 25686873

I was able to execute the program successfully after I changed the clob to varchar2. Thank you for your help!

 

by: geeta_m9Posted on 2009-10-28 at 11:57:45ID: 25686902

I changed the following lines to varchar2:

FUNCTION get_prereq(p_subj_code in SCBCRSE.SCBCRSE_SUBJ_CODE%TYPE,p_crse_numb in SCBCRSE.SCBCRSE_CRSE_NUMB%TYPE) RETURN varchar2;
  FUNCTION get_coreq(p_subj_code in SCBCRSE.SCBCRSE_SUBJ_CODE%TYPE,p_crse_numb in SCBCRSE.SCBCRSE_CRSE_NUMB%TYPE) RETURN varchar2;

and I changed the following from clob to varchar2:

l_result varchar2(32767);
l_result2  varchar2(32767);


 

by: geeta_m9Posted on 2009-10-28 at 11:59:49ID: 31647074

Thanks!

20120131-EE-VQP-002

3 Ways to Join

30-Day Free Trial

The Experts

98% positive feedback on 31,087 answers since March 2000. angeliii is a Microsoft Most Valuable Professional for his work with MS SQL Server & Develoment.

He has also proven his knowledge of Visual Basic Programming, PHP Scripting and Oracle Databases.

The Experts

97% positive feedback on 10,752 answers since July 2000. lrmoore has more than 18 years experience in the networking industry.

The six-time Mircosoft MVPs specialties include firewalls, virtual private networking, and network management.

Testimonials

"...and excellent source for support... Kind of like having your very own IT dept." Electriciansnet

Testimonials

"I was apprehensive at signing up at first. However... it has already made my life as an IT administrator much easier." JaCrews

Testimonials

"WOW! You guys have great, active, and knowledgeable people on here." moore50

Business Clients

Business Clients

In the Press

"If you’ve got a question... Experts Exchange can supply an answer.”

In the Press

"...an invaluable aid for both IT professionals and those who require tech support."

In the Press

"where IT professionals provide quick answers on just about any topic"

Business Account Plans

Loading Advertisement...