I changed mycode to bind variable as below but showing error as
ORA-06550: line 1, column 22:
PLS-00103: Encountered the symbol "" when expecting one of the following:
@ <an identifier> <a double-quoted delimited-identifier>
ORA-06550: line 1, column 35:
PLS-00103: Encountered the symbol ";" when expecting one of the following:
. ( , * % & - + / at mod remainder rem <an identifier>
<a double-quoted delimited-identifier> <an exponent (**)> as
from into || multiset bulk
1. begin
2. PASSWORD_CHANGE_1('SYS_DBA','TestDB','TestDB1');
3. END
My code is
create or replace PROCEDURE PASSWORD_CHANGE_1(P2_DATABASE VARCHAR2,P2_USERAME VARCHAR2 ,P2_PASSWORD VARCHAR2) IS
SQL_STRING VARCHAR(500);
BEGIN
SQL_STRING:=' begin accout_change@:1LINK(:2,:3); end; ';
EXECUTE IMMEDIATE SQL_STRING using in P2_DATABASE ,P2_USERAME,P2_PASSWORD;
dbms_output.put_line(SQL_STRING);
END;
create or replace PROCEDURE accout_change_1 (
P2_USERAME VARCHAR2,
P2_PASSWORD VARCHAR2
) IS
sql_string VARCHAR2(500);
BEGIN
sql_string := 'alter user :1 identified by :2 ';
EXECUTE IMMEDIATE sql_string USING P2_USERAME, P2_PASSWORD ;
-- dbms_output.put_line('string ' || sql_string);
-- dbms_output.put_line('Success');
EXCEPTION
WHEN OTHERS then
dbms_output.put_line('Failed');
END;
December 05, 2019 - 9:06 am UTC
Nice start.
But as noted below, you can't bind identifiers (the username, database link name, & password).
So you still need to concatenate these - AFTER passing them to dbms_assert.