Virtual Private Database: Create Policy function/s so that a user can view his own records or records inserted by other users with the same company ID
According to the question, all you need to do is attach a predicate on the query to customer table as shown below.

select * from customer where company_id in(select company_id from user_info where Admin='admin_user');


Right?
If yes, you have to create a function which should return a predicate as:

company_id in(select company_id from user_info where Admin='admin_user')


Well, I have done a small demo for your requirement. I have created doramail as an ADMIN user who owns the tables user_info, customer and a function called Hello_Comp_ID.

SQL&gt; conn / as sysdba
SQL&gt; create user doramail identified by doramail;

User Created.

SQL&gt; grant connect, resource to doramail;

Grant succeeded.

SQL&gt; conn doramail/doramail

Connected.

SQL&gt; create table user_info(Company_Id number, Admin varchar2(20));

Table created.

SQL&gt; create table customer(company_id number, name varchar2(20));

Table created.

SQL&gt; insert into user_info values(100, 'MKarki');

1 row created.

SQL&gt; insert into user_info values(200,'VKarki');

1 row created.

SQL&gt; insert into user_info values(300,'CKarki');

1 row created.

SQL&gt; insert into customer values(100,'Joe');

1 row created.

SQL&gt; insert into customer values(200,'Jimmy');

1 row created.

SQL&gt; insert into customer values(300,'Cashy');

1 row created.

SQL&gt; insert into customer values(300,'Tim');

1 row created.

SQL&gt; Commit;

Commit complete.

SQL&gt; select * from user_info;

COMPANY_ID ADMIN                                                                
---------- --------------------                                                 
       100 MKarki                                                               
       200 VKarki                                                               
       300 CKarki                                                               

SQL&gt; select * from customer;

COMPANY_ID NAME                                                                 
---------- --------------------                                                 
       100 Ricky                                                                
       100 Joe                                                                  
       200 Jimmy                                                                
       300 Cashy                                                                
       300 Tim  
SQL&gt; Create or Replace FUNCTION Hello_Comp_ID( P_SCHEMA IN varchar2, P_OBJECT IN varchar2) Return varchar2 IS
  2    V_User Varchar2(20);
  3    V_Predicate Varchar2(200);
  4  BEGIN
  5   V_User := SYS_CONTEXT('USERENV','SESSION_USER');
  6    If V_User = 'DORAMAIL' then
  7      V_Predicate := '';
  8    Else
  9     V_Predicate := 'Company_Id in(select company_id from user_info where admin='||q'[']' || V_User || q'[']'||')';
 10    END IF;
 11    RETURN  V_Predicate;
 12  END;
 13  /

Function created.

SQL&gt; exec DBMS_RLS.ADD_POLICY('Doramail','customer','secure_select','doramail','Hello_Comp_ID','SELECT,INDEX');

PL/SQL procedure successfully completed.

SQL&gt; select * from customer;

COMPANY_ID NAME                                                                 
---------- --------------------                                                 
       100 Ricky                                                                
       100 Joe                                                                  
       200 Jimmy                                                                
       300 Cashy                                                                
       300 Tim   
SQL&gt; conn / as sysdba
Connected.    
SQL&gt; create user "MKarki" identified by mkarki;

User created.

SQL&gt; grant connect, resource to "MKarki";

Grant succeeded.

SQL&gt; conn doramail/doramail
Connected.
SQL&gt; grant select on customer to "MKarki";

Grant succeeded.

SQL&gt; conn "MKarki"/mkarki
Connected.
SQL&gt; select * from doramail.customer;

COMPANY_ID NAME                                                                 
---------- --------------------                                                 
       100 Joe                                                                  
       100 Ricky  


Since the user MKarki belongs to company_id 100 he only can see records where company_id is 100.

In your case there might be problem in returned predicate. You can change:

V_Hello:='SYS_CONTEXT('||q'['CompAdmin']'||
','||q'['Company_ID']'||')
='||q'['Company_ID']'; 


To this:

V_Hello:='SYS_CONTEXT('||q'[']' || CompAdmin || q'[']' ||
','|| q'[']' || Company_ID || q'[']' ||')
='||q'[']' || Company_ID || q'[']';


If you are still having trouble then you can view the predicate being attached to your query using explain plan command. And then you can change the predicate(if there are any logical/syntactical errors in the predicate) in the function. 

SQL&gt; explain plan for select * from doramail.customer;

Explained.

SQL&gt; select * from table(dbms_xplan.display());

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 2021122684

--------------------------------------------------------------------------------
| Id  | Operation      | Name      | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |           |     2 |   100 |     6   (0)| 00:00:01 |
|*  1 |  HASH JOIN SEMI    |           |     2 |   100 |     6   (0)| 00:00:01 |
|   2 |   TABLE ACCESS FULL| CUSTOMER  |     5 |   125 |     3   (0)| 00:00:01 |
|*  3 |   TABLE ACCESS FULL| USER_INFO |     1 |    25 |     3   (0)| 00:00:01 |
--------------------------------------------------------------------------------


PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------

   1 - access("COMPANY_ID"="COMPANY_ID")
   3 - filter("ADMIN"='MKarki')

Note
-----
   - dynamic sampling used for this statement (level=2)

20 rows selected.