Answer
This is a common, generalizable gotcha: referencing a framework _TAB table directly (the underlying physical table) rather than its corresponding view usually only works for the Application Owner, since ordinary users typically aren't granted direct access to the raw tables the way they are to the views built on top of them. Declare the variable/cursor against the corresponding view instead — for example, replace a fnd_stream_tab%ROWTYPE declaration with a cursor selecting from the FND_STREAM view and use that cursor's %ROWTYPE — since non-owner users can access the view even though they can't see the underlying table directly. Field names on the view may not exactly match the table, so some adjustment to the rest of the code can be needed after switching.