Substitution Variable in Procedures
Hi
I want to write a procedure that will allow the user to insert details into a table at runtime. For the sake of argument the table name is EMPLOYEE and the column I want to update is SALARY.
Thanks for your help
Andrew.
what software are you going to use to develop client UI?
have that client UI interface call a stored procedure that accepts employee number and new salary as input parameters and performs the update.
Similar Messages
-
Substitution variables in stored procedures
Help, anybody! I want to create a procedure that updates a column of a table, however I want that column and the new data specified at run time. I've tried writing a procedure that has substitution variables for the column and new_data values:
CREATE OR REPLACE PROCEDURE update_client(v_account_id IN VARCHAR2)
IS
v_column varchar2(50);
v_new_data varchar2(50);
last_name varchar2(20);
BEGIN
v_column:=&v_column;
if v_column=last_name then
UPDATE Client set last_name='&v_new_data' where account_id=v_account_id;
end if;
end;
but that's not working, and I also tried to pass v_column and v_new_data as parameters but that won't work either.
CREATE OR REPLACE PROCEDURE update_client (v_account_id IN VARCHAR2, v_column IN VARCHAR2, v_new_data IN VARCHAR2) AS
BEGIN
UPDATE client set v_column=v_new_data where v_account_id=account_id;
END;
I get the error: unable to resolve "V_COLUMN" as a column
Is there anyway at all to do this via a stored procedure? I'm all out of ideas.
ThanksIn Oracle8i you can use dinamic nebeded SQL. In previous versions you need DBMS_SQL.
Regards
<BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica">quote:</font><HR>Originally posted by Lori Fortner ([email protected]):
Help, anybody! I want to create a procedure that updates a column of a table, however I want that column and the new data specified at run time. I've tried writing a procedure that has substitution variables for the column and new_data values:
CREATE OR REPLACE PROCEDURE update_client(v_account_id IN VARCHAR2)
IS
v_column varchar2(50);
v_new_data varchar2(50);
last_name varchar2(20);
BEGIN
v_column:=&v_column;
if v_column=last_name then
UPDATE Client set last_name='&v_new_data' where account_id=v_account_id;
end if;
end;
but that's not working, and I also tried to pass v_column and v_new_data as parameters but that won't work either.
CREATE OR REPLACE PROCEDURE update_client (v_account_id IN VARCHAR2, v_column IN VARCHAR2, v_new_data IN VARCHAR2) AS
BEGIN
UPDATE client set v_column=v_new_data where v_account_id=account_id;
END;
I get the error: unable to resolve "V_COLUMN" as a column
Is there anyway at all to do this via a stored procedure? I'm all out of ideas.
Thanks<HR></BLOCKQUOTE>
null -
Using an apostrophe in a substitution variable
Hello, I have a simple sql plus script which sets a substitution variable and then uses this in an INSERT statement to insert the value of the variable into a database table.
For example:
DEFINE TEXT = 'For full details see PQPs website'
insert into CONSTS(PARAMETER, VALUE, TYPE) values ('admin.marketing.website', '&TEXT1', 'ADMIN');
That's all fine and dandy.
However, I want to put a possessive apostrophe in PQPs, i.e. PQP's but can't find a way that lets me do it and I've tried everything I can think of.
Using the escape character \ doesn't work
i.e.
set escape \
DEFINE TEXT = 'For full details see PQP\'s website'
I just get the string 'For full details see PQP\'
Also using two apostrophes doesn't work either
i.e.
DEFINE TEXT = 'For full details see PQP''s website'
I get the error "ORA-01756: quoted string not properly terminated"
when I try and insert into the database.
I've tried surrounding the value in double quotes etc. and everything I can think of but for the life of me I can't get a string containing an apostrophe into the database using a substitution variable. It must be possible though, isn't it?
Thanks
Andy BirchallCould this be a solution ?
TEST@db102 > var text varchar2(50);
TEST@db102 > exec :text := 'For full details see PQP'||chr(39)||'s website';
PL/SQL procedure successfully completed.
TEST@db102 > insert into CONSTS(PARAMETER, VALUE, TYPE) values ('admin.marketing.website', :text, 'ADMIN');
1 row created.
TEST@db102 > select * from consts;
PARAMETER VALUE TYPE
admin.marketing.website For full details see PQP's website ADMIN
TEST@db102 > -
&& Substitution Variable in Package Body using SQL Developer
Hi Folks,
I've moved over to working to in SQL Developer (its a very early version - 1.0.0) from a combination of SQL*Plus command line and a text editor. I'm trying to get this upgrgraded, but I think the question will be the same with a newer version anyway.
I am creating a package, and in the package body I have some &&my_var substitutions that I was previoulsy prompted for when calling the .sql from the command line SQL*Plus. I need this as the variable needs to be different for the development and live environment.
When working in SQL Developer, I can load the package body from Connection->Packages->My Package->My Package Body, and click the edit button to edit the code, however, when I click the Compile button in the top of the window my code error's because of the substituion variablle. An example is:
CREATE OR REPLACE
PACKAGE BODY MY_PACKAGE AS
PROCEDURE MY_PROCEDURE
BEGIN
my_variable := &&my_function_from_live_or_dev_database
END MY_PROCEDURE
Can anyone tell me if there is a way of defining a compiler variable within the IDE widow while editing a package body stored in the database, without manually copying the code into the Worksheet and running it as a script?
Thanks,
AM953104 wrote:
Thanks for the reply, the code was just quickly typed to show the sort of thing I am doing, it wasn't actual code form my project.
I've come from a C background so what I would have done would be create a #define and changed to when on live or development - or passed the variable to the build environment from the IDE or makefiles and the change would have reflected through my whole project.
What I want to be able to do is alter a definition of some sort that will reflect throughout my whole project, so I can change it in one location to minimize code changes before going live. I don't really want to be prompted at all. On one system it needs to be DEV_10 and on the other it needs to be LIVE_10.Is there a possibility to elimiante this difference at all?
For example if DEV_10 is the oracle schemauser on the development database and LIVE_10 would be the one on the production system. THen you could just remove all references to the schema from your code.
IF you are already connected to this schema, then you don't need to specify the schema name anymore.
example
instead of
create or replace package dev_10.myPackage
...you can simply use
create or replace package myPackage
...If needed you can alter the cuurently connected user just before you run the script.
alter session set current_schema = LIVE10;
create or replace package myPackage
...This would be a different working window in the developer (script worksheet, instead of direct pl/sql editor).
Substitution variables are allowed there. -
Alternative to Substitution Variables
I'm attempting to loop though some logic X number of times based on a user-defined (defined using substitution variable) parameter. Within the loop I need to have user-definable parameter as well. Since substitution variables cannot be used in a loop I'll need an alternative.
Here an example:
accept L_num_recs NUMBER PROMPT 'Enter Number of Records (0-9);
BEGIN
FOR i in 1..&L_num_recs LOOP
parameter1 := &m1
parameter2 := &m2
END LOOP
END;
Because &m1 and &m2 are substitution variables they are bound each time through the loop.
Any thoughts? Thanks!Just assign those subs to local variables and then use the local variables in the loop:
sql>accept l_num_recs number prompt 'Enter Number of Records (0-9): '
Enter Number of Records (0-9): 3
sql>declare
2 v_text1 number := &m1;
3 v_text2 number := &m2;
4 begin
5 for i in 1..&l_num_recs loop
6 dbms_output.put_line( v_text1 );
7 dbms_output.put_line( v_text2 );
8 end loop;
9 end;
10 /
Enter value for m1: 55
old 2: v_text1 number := &m1;
new 2: v_text1 number := 55;
Enter value for m2: 77
old 3: v_text2 number := &m2;
new 3: v_text2 number := 77;
old 5: for i in 1..&l_num_recs loop
new 5: for i in 1.. 3 loop
55
77
55
77
55
77
PL/SQL procedure successfully completed. -
Mitigating SQL injection when forced to use substitution variables
The 3rd party software that I use has exactly one way of allowing users to specify runtime parameters: Substitution variables.
The scripts are executed using SQL*Plus. I'm looking for ways to secure this.
Please don't say "Don't use substitution variables" - read above, it's the only way this software works.
My first thought was something like this:
var myvar varchar2(30)
exec :myvar := '&user_input';That's no good. What if the user specifies "X'; execute immediate 'drop table sometable" Then we get
exec :myvar := 'X'; execute immediate 'drop table sometable';Again, no good.
I thought perhaps something like the following would work:
exec :myvar := dbms_assert.noop('&user_input');but then again, a malicious user could specify "'); execute immediate 'drop table sometable'; dbms_assert.noop('"
I'm open to suggestions.
What can I do to sanitize substitution variables?
Thank you!
Edited by: krissco on Jan 30, 2013 3:02 PMYou could use:
var myvar varchar2(30)
exec :myvar := DBMS_ASSERT.ENQUOTE_LITERAL('&user_input');For example:
SQL> exec :myvar := '&user_input';
Enter value for user_input: X';execute immediate 'begin dbms_output.put_line(''XXXX'');end;
XXXX
PL/SQL procedure successfully completed.
SQL> exec :myvar := DBMS_ASSERT.ENQUOTE_LITERAL('&user_input');
Enter value for user_input: X';execute immediate 'begin dbms_output.put_line(''XXXX'');end;
BEGIN :myvar := DBMS_ASSERT.ENQUOTE_LITERAL('X';execute immediate 'begin dbms_output.put_line(''XXXX'');end;'); END;
ERROR at line 1:
ORA-06550: line 1, column 48:
PLS-00103: Encountered the symbol ";" when expecting one of the following:
) , * & = - + < / > at in is mod remainder not rem =>
<an exponent (**)> <> or != or ~= >= <= <> and or like like2
like4 likec as between from using || multiset member
submultiset
The symbol ")" was substituted for ";" to continue.
ORA-06550: line 1, column 110:
PLS-00103: Encountered the symbol ")" when expecting one of the following:
* & = - + ; < / > at in is mod remainder not rem return
returning <an exponent (**)> <> or != or ~= >= <= <> and or
like like2 like4 likec between into
SQL>SY.
Edited by: Solomon Yakobson on Jan 30, 2013 8:28 PM -
Setting Essbase substitution variable thru ODI
Hello Friends,
We have some procedures in ODI that call maxl scripts to unlock app, clear data and agg. But how do we set Substitution variable in Essbase?
Any feedbacks are appreciate...
Thank You.Thanks John.
- We created a maxl script with the statement below
alter system set variable 'ActMon' 'Feb';
- Created a procedure in ODI to call the maxl
the procedure is working...but we still have to manually edit the maxl script every month to change the current month value.
How about this?
We have a oracle table in ODI schema which has month column populated. can we use that month column data and some how set the Essbase Sub var? -
Hi Everyone,
I'm trying to pass a substitution variable that contains a where clause from TEST2_PROC to TEST1_PROC, but all records are selected by TEST1_PROC as though the variable is ignored even though it contains the correct syntax.
Code below.
Any suggestions?
Thank You in Advance for Your Help,
Lou
create or replace
PROCEDURE TEST2_PROC
AS
my_refcur SYS_REFCURSOR;
my_id ci_summrpt_report_codes.id% TYPE;
my_descr ci_summrpt_report_codes.descr% TYPE;
my_valid_flag ci_summrpt_report_codes.valid_flag% TYPE;
my_success VARCHAR2(100);
my_where VARCHAR2(50) := ' WHERE ID = 1';
BEGIN
TEST1_PROC(my_refcur,my_where) ;
DBMS_OUTPUT.PUT_LINE('ID DESCR VALID_FLAG');
DBMS_OUTPUT.PUT_LINE('----- ------- ---------');
LOOP
FETCH my_refcur INTO my_id, my_descr, my_valid_flag;
EXIT
WHEN my_refcur%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(my_id || CHR(9) || RPAD(my_descr,25) || CHR(9) || my_valid_flag);
END LOOP;
CLOSE my_refcur;
END TEST2_PROC;
create or replace
PROCEDURE TEST1_PROC (
p_refcur OUT SYS_REFCURSOR,
p_where in VARCHAR2
IS
v_id ci_summrpt_report_codes.id% TYPE;
v_descr ci_summrpt_report_codes.descr% TYPE;
v_valid_flag ci_summrpt_report_codes.valid_flag% TYPE;
BEGIN
DBMS_OUTPUT.PUT_LINE(p_where);
OPEN p_refcur FOR SELECT id, descr, valid_flag FROM
(SELECT 1 AS "ID", 'ONE' AS "DESCR", 'Y' AS "VALID_FLAG" FROM DUAL
UNION ALL
SELECT 2, 'TWO', 'Y' FROM DUAL
UNION ALL
SELECT 3, 'THREE','Y' FROM DUAL
UNION ALL
SELECT 4, 'FOUR','Y' FROM DUAL)
p_where;
END TEST1_PROC;In TEST1_PROC you need to open ref cursor with dynamic SQL:
create or replace
PROCEDURE TEST1_PROC (
p_refcur OUT SYS_REFCURSOR,
p_where in VARCHAR2
IS
v_id ci_summrpt_report_codes.id% TYPE;
v_descr ci_summrpt_report_codes.descr% TYPE;
v_valid_flag ci_summrpt_report_codes.valid_flag% TYPE;
BEGIN
DBMS_OUTPUT.PUT_LINE(p_where);
OPEN p_refcur FOR 'SELECT id, descr, valid_flag FROM ' ||
'(SELECT 1 AS "ID", ''ONE'' AS "DESCR", ''Y'' AS "VALID_FLAG" FROM DUAL ' ||
'UNION ALL ' ||
'SELECT 2, ''TWO'', ''Y'' FROM DUAL ' ||
'UNION ALL ' ||
'SELECT 3, ''THREE'',''Y'' FROM DUAL ' ||
'UNION ALL ' ||
' SELECT 4, ''FOUR'',''Y'' FROM DUAL) ' ||
p_where;
END TEST1_PROC;SY. -
Block based on "From clause query" and substitution variable
Hi Folks,
I have a "From clause query" block type, which is based on query that uses a substitution variable (:BLOCK.COLUMN) from previous block. When I run a query, then I obtain an error: ORA-01008: not all variables bound.
My query looks like:
select seq_no, prod_code, descr, curr_code,
max(decode(sched_type_code,'ROLLOVER',amt,0)) OUTSTD_DRAW,
max(decode(sched_type_code,'INTCHG',amt,decode(sched_type_code,'FEEREC',amt,0))) OUTSTD_INTEREST_FEE
from
select r.fac_no, r.prod_code, f.descr, r.prod_seq_no seq_no, r.curr_code, r.sched_type_code,sum(nvl(rep_amt,0)) amt
from repay_scheds r,
fac_prods f
where r.fac_no = f.fac_no
and r.prod_code = f.prd_code
and r.prod_seq_no = f.seq_no
and r.fac_no = :B2.FAC_NO
and r.trans_ref_from is not null
and r.status <> 'P'
group by r.fac_no, r.prod_code, f.descr, r.prod_seq_no, r.curr_code, r.sched_type_code
group by seq_no, prod_code, descr, curr_code
having max(decode(sched_type_code,'ROLLOVER',amt,0)) >0 or max(decode(sched_type_code,'INTCHG',amt,decode(sched_type_code,'FEEREC',amt,0))) > 0Once I replace that substitution variable in query condition with some exact test number then it works fine.
select seq_no, prod_code, descr, curr_code,
max(decode(sched_type_code,'ROLLOVER',amt,0)) OUTSTD_DRAW,
max(decode(sched_type_code,'INTCHG',amt,decode(sched_type_code,'FEEREC',amt,0))) OUTSTD_INTEREST_FEE
from
select r.fac_no, r.prod_code, f.descr, r.prod_seq_no seq_no, r.curr_code, r.sched_type_code,sum(nvl(rep_amt,0)) amt
from repay_scheds r,
fac_prods f
where r.fac_no = f.fac_no
and r.prod_code = f.prd_code
and r.prod_seq_no = f.seq_no
and r.fac_no = 2012500
and r.trans_ref_from is not null
and r.status <> 'P'
group by r.fac_no, r.prod_code, f.descr, r.prod_seq_no, r.curr_code, r.sched_type_code
group by seq_no, prod_code, descr, curr_code
having max(decode(sched_type_code,'ROLLOVER',amt,0)) >0 or max(decode(sched_type_code,'INTCHG',amt,decode(sched_type_code,'FEEREC',amt,0))) > 0How can I use substitution variable within query for "From clause query" block type? Or any other way how to get the same result?
Thanks for your reply.
TomasI have a solution:
Before entering block I'm calling function, that populates my block:
PROCEDURE POP_<<MY_BLOCK>>_BLOCK IS
query_txt varchar2(2000);
BEGIN
query_txt := '(select seq_no, prod_code, descr, curr_code,
max(decode(sched_type_code,''ROLLOVER'',amt,0)) OUTSTD_DRAW,
max(decode(sched_type_code,''INTCHG'',amt,decode(sched_type_code,''FEEREC'',amt,0))) OUTSTD_INTEREST_FEE
from
select r.fac_no, r.prod_code, f.descr, r.prod_seq_no seq_no, r.curr_code, r.sched_type_code,sum(nvl(rep_amt,0)) amt
from repay_scheds r,
fac_prods f
where r.fac_no = f.fac_no
and r.prod_code = f.prd_code
and r.prod_seq_no = f.seq_no
and r.fac_no = '||:B2.FAC_NO||'
and r.trans_ref_from is not null
and r.status <> ''P''
group by r.fac_no, r.prod_code, f.descr, r.prod_seq_no, r.curr_code, r.sched_type_code
group by seq_no, prod_code, descr, curr_code
having max(decode(sched_type_code,''ROLLOVER'',amt,0)) >0 or max(decode(sched_type_code,''INTCHG'',amt,decode(sched_type_code,''FEEREC'',amt,0))) > 0)';
Go_Block('<<MY_BLOCK>>' );
Clear_Block ;
Set_Block_Property( '<<MY_BLOCK>>', QUERY_DATA_SOURCE_NAME, query_txt) ;
-- populate my block --
Execute_Query ;
END;Thanks,
Tomas -
Changing substitution variables through ODI
Hi John!
We using ODI for loading data, before load we have to clear data.
I have 2 questions regarding this issue:
1. Can I change substitution variables through ODI
2. Can I execute BR in Essbase.cmd
Regards
SashaHi,
1. You can call maxl to update the substitution variables, either using the pre-maxl options in the KMs
or you can execute an OS command through an ODI procedure
2. I am not sure what you are asking, are you asking whether you can execute BRs through ODI, if so have a read of my last blog where I covered how to do it.
You can execute BRs by using the command line launcher, have a read of the blog anyway because it goes through the command line launcher.
Cheers
John
http://john-goodwin.blogspot.com/ -
Can we use Substitution variables in MAXL?
Hi,
Can we use substitution variables in MAXL script?
I have to run this MAXL command for clearing a slice of ASO cube on V11.1.1.3.
alter database Apname.DBname clear data in region 'CrossJoin({[2009]},{[Dec]})';
I am planning to use Current_year & Current_month variables instead of hardcoding 2009 & Dec as I have to use this everymonth to clear the current months data.
If it is allowed, what is the syntax?
Is there any alternative apart from substitution variables?
Appreciate your thoughts.
Thanks,
-Ethan.You would just use ampersand and the variable name instead of the hard coding e.g. &yearVar &periodVar.
Not tried it on aso clears but in theory it should work as ...'CrossJoin({&yearVar},{&periodVar})';
just change yearVar and periodVar for your substitution variable names.
Cheers
John
http://john-goodwin.blogspot.com/ -
Use varialbe as a value in substitution variable
Hi there,I incrementaly update my cube day by day.And I set a user variable in autoexec.bat to get the current date,eg '2003-06-23'.Could I use such variable as a variable's value in substition variable ?My platform is 6.5 on w2k.Regards,luau
You can use that in a MAXL script to set the substitution variable.the MAXL script would be something like:Alter database $4 drop variable $5;alter database $4 add variable $5 $7 ;where: $4 is the app.cub $5 is the substitution variable name $7 is the value of the subs. variableRich Sullivan - Beacon Analytics
-
How to use a substitution variable in a load rule?
I need to use a substitution variable in a load rule in a column, as I will receive a parameter to fix the Month and Year values within the data loading, could somebody tell me if this is possible. I put an expresion "&Yearproc" in the column value but it is not working.
If you're a member of ODTUG (or even if not, you can sign up for an associate membership for free) you can download Glenn's presentation from 2009 Kaliedoscope "Little Used Features of Essbase (Like Data Mining and Triggers)" -- there is a section in that presentation on substitution variables -- he does a really good job in showing how this works.
Go to: www.odtug.com, then Tech Resources, then Essbase/Hyperion, and search for Schwartzberg. Currently it's the ninth presentation on the list -- I think this changes based on popularity of downloads.
Regards,
Cameron Lackpour -
Error When Prompting for Substitution Variable
Hi - I'm receiving an error when I try to run the following using the substitution variable - but only when I enter a string; when I enter a numeric value it runs fine.
DECLARE
l_SCR_Info VARCHAR2(50) := '''SCR'||&SCR_NUM||'-'||'''';
begin
dbms_output.put_line(l_SCR_Info);
end;Here is the error I receive when I supply a string value when prompted:
ORA-06550: line 3, column 52:
PLS-00201: identifier 'AB' must be declared
ORA-06550: line 3, column 27:
PL/SQL: Item ignored
ORA-06550: line 10, column 22:
PLS-00320: the declaration of the type of this expression is incomplete or malformed
ORA-06550: line 10, column 1:
PL/SQL: Statement ignoredCan anyone shed some light on what I'm missing here?
Thanks!
ChristineHi,
It looks like you just want one string there:
l_SCR_Info VARCHAR2(50) := '''SCR&SCR_NUM-''';Remeber how substitution variables work: SQL*Plus replaces them with values before sending the code to the back end to be compiled.
If you give a value like AB for the variable, the code you posted is equivalent to:
l_SCR_Info VARCHAR2(50) := '''SCR'|| AB ||'-'||'''';by the time it reaches the compiler. AB is not inside quotes, so the compiler looks for a variable or function called AB.
If you gave a number:
l_SCR_Info VARCHAR2(50) := '''SCR'|| 123 ||'-'||'''';there's no problem; the compile knows what the literal number 123 is. -
Conditional suppression using substitution variable in Hyperion financial r
Hi all,
Is there a way that I can suppress a column using substitution variable in hyperion financial reporting?
For eg, i want to suppress the column if the value of the substitution variable curr_mnth = jun.
Is there a way to do this? In conditional suprression dialog box, I dont find this option.
Please suggest.
Your response is appreciated.
Thanks,
Sirisha.Hi Sirisha
In my earlier reply I think I may have mislead you as I thought that you could set the member name equal to that in a row/column and I've managed to get into a HFR studio session this morning and realised that the conditional suppression only allows you to suppress where member name = 'XXX' (specific text) so that doesn;t meet your requirement.
Different people will have different ways of achieving what you want and everyones requirements are different. If it helps my preferred way of conditionally suppressing periodic data (for Planning/Essbase) is to add a dynamic calc account member called 'TP-Index' into the database, set up a formula so that each period returns a numeric value from 1 to 12 to match the fiscal/calendar year as required.
Then in reporting bring the account and period dimensions into rows/columns so that you are able to retrieve data for the TP-Index account and the period as defined in your substitution variable. You can then choose how the suppression works based on a numeric value, commonly you may want to suppress if greater than, e.g. you have a multi-period report where your actual data is to June so you want to suppress everything from July onwards.
I'm sure that a similar thing could be achieved in HFM as well if that is your underlying system instead of Essbase.
Does that help?
Stuart
Maybe you are looking for
-
Sending Mails to Multiple Recipients using UTL_SMTP
create or replace procedure send_mail(msg_text varchar2) is c utl_smtp.connection; PROCEDURE send_header(name IN VARCHAR2, header IN VARCHAR2) AS BEGIN utl_smtp.write_data(c, name || ': ' || header || utl_tcp.CRLF); END; BEGIN c := utl_smtp.open_conn
-
Logic Pro X crashes every time I try to add to loop library???
Logic pro x 10.0.2 Mac book pro Retina, Mid 2012 Processor 2.3 GHz Intel Core i7 Memory 8 GB 1600 MHz DDR3 I have been using logic pro x for over a year now and have recently started creating my own apple loops. I am in the process of adding a big
-
IPhoto library move to external HD | organization
My laptop is running out of space so I'm moving my large iPhoto library to an external hard drive. I know how to move the content and adjust iPhoto to route to the new location, but can I do this WITHOUT affecting my organization/events? I have 200
-
Data upload from R3 to BPC using filters
We are facing a performance issue on the uploading data flow from R3 to BPC. Two steps have been set up. Step1: R/3 --> ODS --> BW CUBE (No filters and full mode) Step2: BW CUBE --> BPC CUBE (Standard BW upload package) The first one (from R3 to a B
-
Right now when i try to install Adobe reader X it begins to install the program and then stops part way and tells me I have a newer verision already installed... but I do not! I have one verison that will read basic PDF but I need it to read the more