Home >> FAQs/Tutorials >> Oracle DBA FAQ >> Index

Oracle DBA FAQ - Working with Database Objects in PL/SQL

By: FYIcenter.com

Part:   1  2  3   4  5  6 

(Continued from previous part...)

How To Run SQL Functions in PL/SQL?

Of course, you can run SQL functions in SQL statements. But many SQL functions can also be executed in regular PL/SQL statements, as shown in the following sample script:

DECLARE
  now DATE;
  id NUMBER;
  str VARCHAR2(40);
BEGIN
  now := SYSDATE;
  DBMS_OUTPUT.PUT_LINE('Time #1 = ' ||
    TO_CHAR(now,'HH24:MI:SS'));
  SELECT SYSDATE INTO now FROM DUAL;
  DBMS_OUTPUT.PUT_LINE('Time #2 = ' ||
    TO_CHAR(now,'HH24:MI:SS'));

  id := UID;
  DBMS_OUTPUT.PUT_LINE('User id #2 = ' || TO_CHAR(id));
  SELECT UID INTO id FROM DUAL;
  DBMS_OUTPUT.PUT_LINE('User id #2 = ' || TO_CHAR(id));
  
  str := CHR(70)||CHR(89)||CHR(73);
  DBMS_OUTPUT.PUT_LINE('String #1 = ' || str);
  SELECT CHR(70)||CHR(89)||CHR(73) INTO str FROM DUAL;
  DBMS_OUTPUT.PUT_LINE('String #2 = ' || str);
END;
/
Time #1 = 21:41:16
Time #2 = 21:41:16
User id #2 = 33
User id #2 = 33
String #1 = FYI
String #2 = FYI

How To Retrieve the Count of Updated Rows?

After running an UPDATE statement, the database server returns a count of updated rows. You can retrieve this count from a special predefined variable called SQL%ROWCOUT, as shown in the following tutorial:

CREATE TABLE emp_temp AS SELECT * FROM employees;

BEGIN
  UPDATE emp_temp SET salary = salary * 1.05
    WHERE salary < 5000;
  DBMS_OUTPUT.PUT_LINE('# of rows updated: ' ||
    SQL%ROWCOUNT);
END;
/
# of rows updated: 49

What Is the Implicit Cursor?

The implicit cursor is the cursor automatically defined by PL/SQL for you. Whenever a SQL statement is executed, this cursor will be assigned to represent the execution of this statement. This implicit cursor is called SQL. It has many attributes representing some good information about the execution like:

  • SQL%FOUND - True, if the SQL statement has changed any rows.
  • SQL%NOTFOUND - True, if the SQL statement has not changed any rows.
  • SQL%ROWCOUNT - The number of rows affected by the SQL statement.

See the example below on how to use the implicit cursor:

CREATE TABLE student (id NUMBER(5) PRIMARY KEY,
  first_name VARCHAR(80) NOT NULL,
  last_name VARCHAR(80) NOT NULL);
Table created.

DECLARE
  id NUMBER;
  first_name CHAR(10);
BEGIN
  id := 29;
  first_name := 'Bob';
  INSERT INTO student VALUES(id, first_name, 'Henry');
  first_name := 'Joe';
  INSERT INTO student VALUES(id+1, first_name, 'Bush');

  first_name := 'Fyi';
  UPDATE student SET first_name = first_name WHERE id = 29;
  IF SQL%FOUND THEN
      DBMS_OUTPUT.PUT_LINE('# of rows updated: ' ||
        SQL%ROWCOUNT);
  END IF;

  UPDATE student SET first_name = first_name
    WHERE id = id+1;
  IF SQL%NOTFOUND THEN
      DBMS_OUTPUT.PUT_LINE('No records updated.');
  END IF;
    
  DELETE FROM student WHERE id = id;                    
  DBMS_OUTPUT.PUT_LINE('# of rows updated: ' ||
    SQL%ROWCOUNT);
END; 
/
# of rows updated: 1
No records updated.
# of rows updated: 2

(Continued on next part...)

Part:   1  2  3   4  5  6 


Selected Developer Jobs:

More...